我正在学习C#,是个初学者。我想请求一个硬件项目的URL(树莓派服务器控制窗帘)。它可以工作,但我不理解下面这行代码:
HttpWebRequest request = (HttpWebRequest) WebRequest.Create(rpiIp.text);
我不理解 "(HttpWebRequest)" 是什么意思以及它对 "WebRequest.Create();" 方法的影响。
有人能解释一下吗?
非常感谢。 James
我正在学习C#,是个初学者。我想请求一个硬件项目的URL(树莓派服务器控制窗帘)。它可以工作,但我不理解下面这行代码:
HttpWebRequest request = (HttpWebRequest) WebRequest.Create(rpiIp.text);
这被称为显式转换。来自MSDN:
方法显式转换(强制转换):显式转换需要一个强制转换操作符。当转换可能会丢失信息或由于其他原因转换可能无法成功时,需要进行强制转换。典型的例子包括将数字转换为具有较少精度或较小范围的类型,以及将基类实例转换为派生类。
WebRequest.Create
返回一个WebRequest
类型的对象,这是一个抽象类,意味着不能创建它的实例,只能创建从WebRequest
继承的派生类型。在这种情况下,强制转换的作用是告诉编译器:"听着,我知道Create
实际上从这个方法返回一个HttpWebRequest
,所以让我像对待一个一样处理它"。当进行强制转换时,如果实际类型是HttpWebRequest
,则会成功,否则将抛出InvalidCastException
异常。
WebRequest().Create()
返回一个WebRequest
类型的对象(这是一个抽象类 - 一个基类,不能单独实例化)。然而,如果您需要使用后代类(如HttpWebRequest
)定义的属性和方法,您必须将返回类型强制转换为您需要/想要的具体派生类。 - marc_s