这2种写法有什么区别

橘子皮... 2018-09-12 12:29:42
Dim myHttpWebRequest As HttpWebRequest
httpw = HttpWebRequest.Create( "https://www.ifeng.com" )



Dim myHttpWebRequest As HttpWebRequest = CType(WebRequest.Create("https://www.ifeng.com"), HttpWebRequest)

有什么区别,我看老外和msdn都大多数用的后一种写法,这有区别么

...全文
215 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
橘子皮... 2018-09-12
  • 打赏
  • 举报
回复
引用 6 楼 sp1234 的回复:
这个是 c# 语言的语法糖,不是 .net 的特性。 比如说代码
public class A
{
    public static string test()
    {
        return null;
    }
}

public class B: A
{

}
现在可以直接写
var x = B.test();
这其实就是等价于 A.test,而B类根本没有 test。 暂时,我觉得这是 c# 一个没啥意义的语法糖。
谢谢,我知道HttpWebRequest是继承自WebRequest,HttpWebRequest里可能是没有create这个方法 我只是困惑直接HttpWebRequest.Create()就可以了,一样的调用WebRequest.Create(),老外包括msdn都非要来个强制转换(HttpWebRequest)WebRequest.Create() c#里这样写还好看点,vb里用ctype,甚至还有老外追求那么点速度用DirectCast(WebRequest.Create(),HttpWebRequest) 非要写的这么臃肿感觉都一样的效果,我是没看到2种写法那种环境下不一致的
橘子皮... 2018-09-12
  • 打赏
  • 举报
回复
Dim myHttpWebRequest As HttpWebRequest httpw = HttpWebRequest.Create( "https://www.ifeng.com" ) 这里是笔误sorry,应该是 Dim myHttpWebRequest As HttpWebRequest myHttpWebRequest = HttpWebRequest.Create( "https://www.ifeng.com" )
橘子皮... 2018-09-12
  • 打赏
  • 举报
回复
Dim myHttpWebRequest As HttpWebRequest httpw = HttpWebRequest.Create( "https://www.ifeng.com" ) 这里是笔误sorry,是
xuzuning 2018-09-12
  • 打赏
  • 举报
回复
你先要搞清楚 CType 是干什么的!
如果你知道了 CType 是强制类型转换,就不应该有疑问了

HttpWebRequest 继承于 WebRequest 类
而 Create 是 WebRequest 的方法(HttpWebRequest 没有重载他),返回的是 WebRequest(HttpWebRequest 的父类型)类型对象
由于你实际需使用 HttpWebRequest 类型对象,所以要做强制类型转换

所以两者并无本质区别,只是适用场合不同

  • 打赏
  • 举报
回复
我没有使用 vb.net。如果 VB.NET 语言现在也有这个特性的话,那也改变不了这个事实:这不是 .net 的特性,这只是某些语言的语法糖。

如果你打开编译成 MSIL 的结果看看,你会看到实际编译出来的代码,不是调用 HttpWebRequest 类型的什么 Create 方法的,而是调用原来的 WebRequest 类型的全局 Create 方法的!
  • 打赏
  • 举报
回复
这个是 c# 语言的语法糖,不是 .net 的特性。

比如说代码
public class A
{
public static string test()
{
return null;
}
}

public class B: A
{

}

现在可以直接写
var x = B.test();

这其实就是等价于 A.test,而B类根本没有 test。

暂时,我觉得这是 c# 一个没啥意义的语法糖。
  • 打赏
  • 举报
回复
HttpWebRequest.CreateHttp才是返回HttpWebRequest,Create方法返回的还是WebRequest,需要做强转
  • 打赏
  • 举报
回复
请说明你的
HttpWebRequest.Create
是从哪里来的?!
幻夢之葉 2018-09-12
  • 打赏
  • 举报
回复
引用 2 楼 jianwen0529 的回复:
1行和2行的区别

httpw这个是笔误吧?

也许还设计到内存和性能上的细微差别,前者构造后又赋值,后者仅一次构造?
幻夢之葉 2018-09-12
  • 打赏
  • 举报
回复
1行和2行的区别

httpw这个是笔误吧?
xuzuning 2018-09-12
  • 打赏
  • 举报
回复
比如在 C#4.0 中
            var p = WebRequest.Create("http://localhost");
Console.WriteLine(p.GetType()); //System.Net.HttpWebRequest
根本就不需要强制类型转换!
但是在 C#2.0、C#3.0 中呢?
xuzuning 2018-09-12
  • 打赏
  • 举报
回复
Create(String^)
为指定的 URI 方案初始化新的 WebRequest 实例。
CreateHttp(String^)
为指定的 URI 字符串初始化新的 HttpWebRequest 实例。

强制类型转换和使用专门的方法都可达成目的
当然,在专门方法没有诞生之前,只能使用强制类型转换
即便是发展到了可以隐式转换的地步,你也不能强迫原作者去改写已经发表过的使用强制类型转换的代码
要用发展的眼光看问题

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧