114 votes

HttpWebRequest c# vs WebRequest

J’ai vu ce morceau de code :

Pourquoi avez-vous besoin d’effectuer un cast ? Pourquoi ne pas simplement utiliser ? Et pourquoi est faire une , pas un `` ?

135voto

Ch00k Points 5901

L' Create méthode est statique, et n'existe que sur WebRequest. L'appel que HttpWebRequest.Create peut être différent, mais son en fait compilée en appelant WebRequest.Create. Il ne semble être sur HttpWebRequest en raison de l'héritage.

L' Create méthode en interne, utilise le modèle de fabrique de faire la création d'objets, basé sur l' Uri vous passer. Vous pouvez récupérer d'autres objets, comme un FtpWebRequest ou FileWebRequest, selon l' Uri.

34voto

Orhan Cinar Points 2889

WebRequest est une classe abstraite, qui dispose d'une usine méthode Create , en fonction de l'URL passée dans, crée une instance d'une sous-classe concrète. Si vous avez besoin ou envie HttpWebRequest httpreq = (HttpWebRequest)WebRequest.Create(strUrl); au lieu de WebRequest req = WebRequest.Create(strUrl); dépend de vos besoins et sur quel type d'Url que vous transmettez.

Si vous passez uniquement HTTP: URL, puis l'ancien code vous permet d'accéder aux propriétés et méthodes de la sous-classe HttpWebRequest implémente en plus de celles définies sur la classe de base WebRequest. Mais si vous avez passé dans un FTP: URL, puis la tentative de le jeter à l' HttpWebRequest serait un échec.

Ce dernier est générique et ne manquerons pas sur tout les types de prises en charge les URL, mais bien sûr sans casting pour toute sous-classe, vous pouvez uniquement accéder aux propriétés et méthodes de la classe de base définit.

-- par Martin Honnen

12voto

Kevin Points 1445

Le casting est nécessaire uniquement lorsque vous en avez besoin accès aux membres unique de HttpWebRequest. L'idée est que si les propriétés/méthodes de prise en charge sur WebRequest sont suffisantes, alors vous pouvez écrire une application qui va travailler contre de nombreux types de demande/réponse de protocoles. Dans ce cas, l'URI peut être quelque chose de donné par l'utilisateur à l'aide de n'importe quel protocole pris en charge par les 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, alors vous pouvez limiter requestUri vos système(s) et cast WebRequest pour le protocole spécifique à la sous-classe. Cela limite les protocoles pris en charge par votre application, mais vous permet d'ajuster le protocole de fonctionnalités spécifiques.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X