Ich habe diesen Code gesehen:
var request = (HttpWebRequest) WebRequest.Create("http://www.google.com");
Warum musst du gießen (HttpWebRequest)
? Warum nicht einfach benutzen HttpWebRequest.Create
? Und warum macht HttpWebRequest.Create
a WebRequest
, nicht a HttpWebRequest
?
c#
httpwebrequest
Unbekannt
quelle
quelle
Antworten:
Die
Create
Methode ist statisch und existiert nur aufWebRequest
. Das AufrufenHttpWebRequest.Create
sieht vielleicht anders aus, ist aber tatsächlich auf das Aufrufen beschränktWebRequest.Create
. Es scheint nur eingeschaltet zu seinHttpWebRequest
wegen der Vererbung eingeschaltet zu sein.Die
Create
Methode verwendet intern das Factory-Muster, um Objekte tatsächlich zu erstellen, basierend auf dem, wasUri
Sie an sie übergeben. Sie könnten tatsächlich andere Objekte wie einFtpWebRequest
oder zurückbekommenFileWebRequest
, abhängig von derUri
.quelle
WebRequest.CreateHttp
ist in 4.5WebRequest
ist eine abstrakte Klasse mit einer Factory-MethodeCreate
, die abhängig von der übergebenen URL eine Instanz einer konkreten Unterklasse erstellt. Egal , ob Sie wollen oder müssen ,HttpWebRequest httpreq = (HttpWebRequest)WebRequest.Create(strUrl);
anstattWebRequest req = WebRequest.Create(strUrl);
hängt von Ihren Bedürfnissen, und auf welche Art von URLs , die Sie passieren in.Wenn Sie nur HTTP: URLs übergeben, können Sie mit dem vorherigen Code
HttpWebRequest
zusätzlich zu den in der Basisklasse definierten Eigenschaften und Methoden auf die Eigenschaften und Methoden zugreifen, die die Unterklasse implementiertWebRequest
. Aber wenn Sie eine FTP: URL übergeben haben, dann der Versuch, zu übertragenHttpWebRequest
fehl.Letzteres ist generisch und schlägt bei keinem der unterstützten URL-Typen fehl. Ohne Casting in eine Unterklasse können Sie natürlich nur auf die Eigenschaften und Methoden zugreifen, die die Basisklasse definiert.
- über Martin Honnen
quelle
Die Besetzung ist nur erforderlich, wenn Sie Zugriff auf Mitglieder benötigen, die nur für HttpWebRequest gelten. Die Idee ist, dass Sie, wenn die von WebRequest unterstützten Eigenschaften / Methoden ausreichen, eine Anwendung schreiben können, die gegen viele Arten von Anforderungs- / Antwortprotokollen funktioniert. In diesem Fall kann der URI vom Benutzer unter Verwendung eines beliebigen Protokolls angegeben werden, das von steckbaren Protokollen unterstützt wird. Neue Protokolle können sogar unterstützt werden, ohne die ursprüngliche Software zu ändern.
Wenn Ihre Anwendung mehr Kontrolle über Funktionen benötigt, die für ein bestimmtes Protokoll spezifisch sind, können Sie requestUri auf Ihre unterstützten Schemata beschränken und WebRequest in die entsprechende protokollspezifische Unterklasse umwandeln. Dies schränkt die von Ihrer Anwendung unterstützten Protokolle ein, ermöglicht es Ihnen jedoch, protokollspezifische Funktionen zu optimieren.
quelle