Answers:
该Create
方法是静态的,仅存在于WebRequest
。调用它的HttpWebRequest.Create
外观可能有所不同,但实际上已编译为call WebRequest.Create
。它似乎仅HttpWebRequest
由于继承而启用。
该Create
方法在内部使用工厂模式根据Uri
传入的对象来实际创建对象。实际上,您可以取回其他对象,例如FtpWebRequest
或FileWebRequest
,具体取决于Uri
。
WebRequest
是一个抽象类,它具有一个工厂方法,该方法Create
根据传入的URL创建一个具体子类的实例。是否需要HttpWebRequest httpreq = (HttpWebRequest)WebRequest.Create(strUrl);
而不是
要
WebRequest req = WebRequest.Create(strUrl);
取决于您的需要以及传入的URL类型。
如果仅传递HTTP:URL,则HttpWebRequest
除了在基类上定义的属性和方法外,前一个代码还允许您访问子类实现的属性和方法WebRequest
。但是,如果您传递FTP:URL,则尝试转换为URL HttpWebRequest
将会失败。
后者是通用的,不会在任何受支持的URL类型上失败,但是当然,如果不强制转换为任何子类,则只能访问基类定义的属性和方法。
-通过马丁·洪恩(Martin Honnen)