問題

HttpMethodがまだ列挙型ではない理由に関して、.Net標準のSystem.Netの実装点に関連する以前の質問がありました。

なぜSystem.Net.Http.HttpMethodは列挙型ではなくクラスですか?

それは拡張性の周りに素晴らしい答えを持っています。

しかし、私がタイトルで言うように、なぜ構造体ではないのですか?

マイクロソフトのガイドラインに従ってすべてのテストを渡すようですか? Webアプリケーションでひどいロットの周りにスローされる情報が少しあり、 'DELETEは最も長い動詞であり、16バイト以下に推奨されます。

これは.Netの中間の家である文字列と関係がありますか?私は利益が限界かもしれないことを知っていますが、私はちょうどよりよく理解したいと思います。

  ベストアンサー

クラスよりも構造体には多くの利点はありません。

構造体はmemcpy/memcmp型の実装に最適であり、HttpMethodの場合は必要ありません。

.netコア実装 https://github.com/dotnet/corefx/blob/master/src/System.Net.Http/src/System/Net/Http/HttpMethod.cs を見ると、参照等価チェックを使用して文字列比較よりわずかに高速なインスタンスを比較することがわかります。構造体では不可能です...ほとんどの構造体インスタンスは実際には異なるインスタンスになり、文字列値を比較する必要があるためです。

HTTPメソッドの文字列値が非常に長くない場合、ここでは構造体に他のメリットはありません。文字列参照が1つしかなく、ほとんどのHttpMethodインスタンスはHttpMethodクラスの静的フィールドのインスタンスになります。

それはプレーンな文字列かもしれませんが、コンパイル中にメソッドの解像度などには役立ちません。

  同じタグがついた質問を見る

c#asp.net-core.net-core.net-standard