J'ai vu ce morceau de code:
var request = (HttpWebRequest) WebRequest.Create("http://www.google.com");
Pourquoi avez-vous besoin de lancer (HttpWebRequest)
? Pourquoi ne pas simplement utiliser HttpWebRequest.Create
? Et pourquoi fait HttpWebRequest.Create
un WebRequest
, pas un HttpWebRequest
?
c#
httpwebrequest
Inconnue
la source
la source
Réponses:
La
Create
méthode est statique et n'existe que surWebRequest
. L'appelerHttpWebRequest.Create
peut sembler différent, mais il est en fait compilé à l'appelWebRequest.Create
. Il ne semble êtreHttpWebRequest
activé qu'à cause de l'héritage.La
Create
méthode utilise en interne le modèle de fabrique pour effectuer la création réelle des objets, en fonction de ce queUri
vous lui passez. Vous pouvez en fait récupérer d'autres objets, comme unFtpWebRequest
ouFileWebRequest
, selon leUri
.la source
WebRequest.CreateHttp
est en 4.5WebRequest
est une classe abstraite, qui a une méthode de fabriqueCreate
qui, en fonction de l'URL transmise, crée une instance d'une sous-classe concrète. Le fait que vous ayez besoin ou que vous vouliezHttpWebRequest httpreq = (HttpWebRequest)WebRequest.Create(strUrl);
plutôt que celaWebRequest req = WebRequest.Create(strUrl);
dépend de vos besoins et du type d'URL que vous transmettez.Si vous ne passez que des URL HTTP:, alors l'ancien code vous permet d'accéder aux propriétés et méthodes
HttpWebRequest
implémentées par la sous-classe en plus de celles définies sur la classe de baseWebRequest
. Mais si vous transmettez une URL FTP:, la tentative de conversionHttpWebRequest
échoue.Ce dernier est générique et n'échouera sur aucun des types d'URL pris en charge, mais bien sûr, sans transtypage vers une sous-classe, vous ne pouvez accéder qu'aux propriétés et aux méthodes définies par la classe de base.
- via Martin Honnen
la source
Le cast n'est nécessaire que lorsque vous avez besoin d'accéder à des membres uniques à HttpWebRequest. L'idée est que si les propriétés / méthodes prises en charge sur WebRequest sont suffisantes, vous pouvez alors écrire une application qui fonctionnera avec de nombreux types de protocoles de demande / réponse. Dans ce cas, l'URI peut être quelque chose de donné par l'utilisateur en utilisant n'importe quel protocole pris en charge par des protocoles enfichables. De nouveaux protocoles peuvent même être pris en charge sans modifier le logiciel d'origine.
Si votre application a besoin de plus de contrôle sur les fonctionnalités spécifiques à un protocole particulier, vous pouvez restreindre requestUri à vos schémas pris en charge et convertir WebRequest dans la sous-classe spécifique au protocole appropriée. Cela limite les protocoles pris en charge par votre application, mais vous permet de modifier les fonctionnalités spécifiques au protocole.
la source