Fiddler の HTTPHeaders クラスにStorage
は、List<HTTPHeaderItem>
.
HTTPHeaders クラスは、次のように .NET 1.1 スタイルで列挙子を公開しますpublic System.Collections.IEnumerator GetEnumerator()
。このメソッドは単純に を返しますStorage.GetEnumerator()
。
質問:
実装しないとパフォーマンスが低下し
IEnumerable<HTTPHeaderItem>
ますか?foreach(HTTPHeaderItem in oHTTPHeaders)
それとも、返されたオブジェクトが型固有のバージョンの IEnumerable も実装していることを認識し、一連のキャストを回避するほど、のコンパイルはスマートですか?古い GetEnumerator() メソッドを (明示的なインターフェイスの実装を介して) 非表示にせずに実装することさえ可能ですか? 古いメソッドを非表示にすると、従来の拡張機能 ( 「.」など)との
IEnumerable<HTTPHeaderItem>
バイナリ互換性が失われます。Method not found: 'System.Collections.IEnumerator Fiddler.HTTPHeaders.GetEnumerator()
結果
*以下の Servy の回答で指摘されているように、型に特化した Enumerator を返す public GetEnumerable() を追加するときに、バイナリ互換性を損なうことを回避する簡単な方法はありません。
ただし、私の特定のシナリオでは、少し幸運でした。HTTPHeaders は基本クラスであり、実質的にすべての呼び出し元が 2 つの派生クラス (HTTPRequestHeaders および HTTPResponseHeaders) のいずれかを使用しています。パブリックのジェネリック GetEnumerator() メソッドをそれぞれの派生クラスの両方に追加しました。これらの新しいタイプ固有の列挙子は、新しいバージョンに対してコンパイルされたコードによって呼び出されますが、再コンパイルされていない古いプラグインは、依然として基本クラスから非ジェネリックの列挙子を取得します。