回答:
Createこの方法は静的であり、かつ唯一の存在しますWebRequest。それを呼び出すHttpWebRequest.Createかもしれないルック異なるが、その実際に呼び出すまでコンパイルWebRequest.Create。HttpWebRequest継承のためにオンになっているように見えます。
Createこの方法は、内部、に基づいて、オブジェクトの実際の作成を行うためのファクトリパターンを使用してUri、あなたがそれに渡します。実際には、に応じて、FtpWebRequestまたはなどの他のオブジェクトを取得できます。FileWebRequestUri
WebRequest.CreateHttpは4.5に入っています
WebRequestCreate渡されたURLに応じて具象サブクラスのインスタンスを作成するファクトリメソッドを持つ抽象クラスです。HttpWebRequest httpreq = (HttpWebRequest)WebRequest.Create(strUrl);代わりに
必要かどうか
WebRequest req = WebRequest.Create(strUrl);は、ニーズと、渡すURLの種類によって異なります。
HTTP:URLのみを渡す場合、前のコードではHttpWebRequest、基本クラスで定義されたものに加えて、サブクラスが実装するプロパティとメソッドにアクセスできますWebRequest。しかし、FTP:URLを渡した場合、へのキャストHttpWebRequestは失敗します。
後者は一般的であり、サポートされているURLのタイプで失敗することはありませんが、サブクラスにキャストしないと、基本クラスで定義されているプロパティとメソッドにしかアクセスできません。
-Martin Honnen経由
キャストは、HttpWebRequestに固有のメンバーにアクセスする必要がある場合にのみ必要です。WebRequestでサポートされているプロパティ/メソッドで十分であれば、多くのタイプの要求/応答プロトコルに対して機能するアプリケーションを作成できるという考え方です。この場合、URIは、プラグ可能なプロトコルでサポートされている任意のプロトコルを使用してユーザーが指定したものである可能性があります。元のソフトウェアを変更せずに、新しいプロトコルをサポートすることもできます。
アプリケーションで特定のプロトコルに固有の機能をさらに制御する必要がある場合は、requestUriをサポートされているスキームに制限し、WebRequestを適切なプロトコル固有のサブクラスにキャストできます。これにより、アプリケーションでサポートされるプロトコルが制限されますが、プロトコル固有の機能を調整できます。