我已经在VB中编写了很长一段时间,我也可以在C#和F#中做很多事情,但是VB和C#之间的一个语法差异继续让我失望.我是谷歌这个,但我不确定该怎么称呼它.请考虑以下示例:
在visual basic中我会这样做:
Dim Request As HttpWebRequest = HttpWebRequest.Create("www.google.com")
Run Code Online (Sandbox Code Playgroud)
但是,当我做出似乎是对C#的"逻辑"转换时:
HttpWebRequest Request = HttpWebRequest.Create("www.google.com");
Run Code Online (Sandbox Code Playgroud)
我得到隐式类型转换错误.看了一些其他代码后,我意识到这似乎是正确的方法:
HttpWebRequest Request = (HttpWebRequest)HttpWebRequest.Create("www.google.com");
Run Code Online (Sandbox Code Playgroud)
但是我不清楚在括号中另外提到HttpWebRequest类型的目的是什么.这是某种我不知道的演员语法吗?在这里发生了什么使得这项工作,而不是直接转换?
对于初学者,是的,该语法是一个显式转换(有时称为C风格转换).
你需要它的原因很简单.该Create方法实际上是从WebRequest类继承的,它返回一个WebRequest(非HttpWebRequest)对象.注意它缺乏存在HttpWebRequest和签名Create
分配给HttpWebRequest变量然后需要向下转换,这绝不保证是安全的,因此您必须明确地转换它.
请注意,下面的代码将还编译.
WebRequest Request = HttpWebRequest.Create("www.google.com");
Run Code Online (Sandbox Code Playgroud)