这个C#语法叫什么名字?它是用来做什么的?

3

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

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

我不理解 "(HttpWebRequest)" 是什么意思以及它对 "WebRequest.Create();" 方法的影响。
有人能解释一下吗?
非常感谢。 James

1
WebRequest().Create() 返回一个 WebRequest 类型的对象(这是一个抽象类 - 一个基类,不能单独实例化)。然而,如果您需要使用后代类(如 HttpWebRequest)定义的属性和方法,您必须将返回类型强制转换为您需要/想要的具体派生类。 - marc_s
(HttpWebRequest) 被称为强制转换,它是一条指令,旨在确保分配的 RHS 作为此类型的实例有效,并且只允许将其分配给此类型的 LHS。 - Pieter Geerkens
RPi服务器是用哪种编程语言编写的? - Austin Mullins
Python,使用flask库和GPIO库。我讨厌Python,但是我不想使用C套接字编程,因为C gpio库更优秀。 - James
1个回答

4

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

显式转换(强制转换):显式转换需要一个强制转换操作符。当转换可能会丢失信息或由于其他原因转换可能无法成功时,需要进行强制转换。典型的例子包括将数字转换为具有较少精度或较小范围的类型,以及将基类实例转换为派生类。

方法WebRequest.Create返回一个WebRequest类型的对象,这是一个抽象类,意味着不能创建它的实例,只能创建从WebRequest继承的派生类型。在这种情况下,强制转换的作用是告诉编译器:"听着,我知道Create实际上从这个方法返回一个HttpWebRequest,所以让我像对待一个一样处理它"。当进行强制转换时,如果实际类型是HttpWebRequest,则会成功,否则将抛出InvalidCastException异常。

可能有帮助的是,显式转换与隐式转换不同。请参阅另一位C#初学者的这篇文章:https://dev59.com/hXM_5IYBdhLWcg3w43pt#1176680 - Philip Pittle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接