【问题标题】:What is this C# Syntax called and what does it do?这个 C# 语法叫什么,它有什么作用?
【发布时间】:2014-07-12 16:33:50
【问题描述】:

我正在学习 C#,我是初学者。我想请求一个硬件项目的 URL(树莓派服务器控制窗帘)它可以工作,但我不明白下面的这一行:

HttpWebRequest request = (HttpWebRequest) WebRequest.Create(rpiIp.text);

我不明白“(HttpWebRequest)”位的用途以及它如何影响“WebRequest.Create();”方法。

谁能解释一下?

非常感谢 詹姆斯

【问题讨论】:

  • WebRequest().Create() 返回一个 WebRequest 类型的对象(这是一个 abstract 类 - 其他人的基类,实际上无法自行实例化)。但是,如果您需要使用在后代类上定义的属性和方法,例如 HttpWebRequest,您必须将返回类型类型转换为您需要/想要的具体派生类
  • (HttpWebRequest) 被称为强制转换,是对编译器的指令,以确保分配 RHS 作为该类型的实例是有效的,并且仅允许分配给这种类型的 LHS。
  • RPi 服务器是用什么语言编写的?
  • Python,使用flask库和GPIO库。我讨厌 python,但我不会为更优秀的 C gpio 库的 c 套接字编程而烦恼

标签: c# .net syntax httpwebrequest


【解决方案1】:

它被称为显式转换。来自MSDN

显式转换(强制转换):显式转换需要强制转换运算符。当转换中可能会丢失信息,或者由于其他原因转换可能不成功时,需要进行强制转换。典型示例包括将数值转换为精度较低或范围较小的类型,以及将基类实例转换为派生类

方法WebRequest.Create返回一个WebRequest类型的对象,它是一个抽象类,意味着不能创建它的实例,只能创建一个从WebRequest继承的底层派生类型。在这种情况下,演员正在做的是告诉编译器:“听着,我知道Create 实际上从这个方法返回了一个HttpWebRequest,所以让我把它当作一个”。转换完成后,如果实际类型是 HttpWebRequest,它将成功,如果不是,它将抛出 InvalidCastException

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-23
  • 1970-01-01
  • 2011-06-10
  • 2016-11-06
  • 1970-01-01
  • 2018-12-17
  • 1970-01-01
相关资源
最近更新 更多