質問

私はこのステートメントをC#仕様で消化しようとしています。

参照タイプはクラスタイプです インターフェイスタイプ, 、アレイタイプ、またはデリゲートタイプ。

私は、構造体がインターフェイスを実装できることを知っています。構造体は値タイプです。

だから、私はこの情報を調整するのに苦労しています。これは、インターフェイスタイプを介して処理された場合、構造体が参照タイプとして動作することを意味しますか?それはあなたが値タイプへの参照を取得できることを意味します...

役に立ちましたか?

解決

これが説明的かもしれないブログ投稿です。

http://blogs.msdn.com/b/abhinaba/archive/2005/10/05/477238.aspx

はい、インターフェイスを実装する構造体は、インターフェイスとしてそれらを処理する場合、参照タイプとしてボックス化されます。はい、これは注意しないと問題を引き起こす可能性があります。

他のヒント

そのとおりです。インターフェイス参照が必要なコンテキストで値タイプを使用すると、ボックス化されます。同じことが起こります System.Object 必要とされている。

手に入らないのは、スタック上の値タイプインスタンス、または別のタイプ内のインターフェイス参照です。ボクシングプロセスがコピーを作成します。

はい、値タイプへの参照を取得できます。値タイプが変数に割り当てられるか、オブジェクトタイプを期待するメソッドにパラメーターとして渡されるとき、値タイプはオブジェクトインスタンス(ボクシングと呼ばれるプロセス)に暗黙的にラップされます。ボクシングは、値を含むオブジェクト参照を作成しています。箱入りオブジェクトが値タイプに割り当てられたり、使用されたりすると、ボックス化されていないため、値が抽出されます。

はい、 structSはインターフェイスを実装できますが、インターフェイスタイプではありません。 a struct 値タイプで、必要に応じてボックスが付けられます。

インターフェイスを実装する構造体は、インターフェイスにキャストされている場合にボックス化されますが、インターフェイスを実装するために制約されている汎用タイプにキャストされている場合ではありません。例えば:

void Compare<T>(T thing1, T Thing2) where T:IComparable<T>
{
   return thing1.CompareTo(Thing2);
}

上記のコードは構造体を使用するときにボクシングを回避しますが、値タイプの2つのオブジェクトを比較するには3つのコピー操作が必要であることに注意してください。パラメーターが値ではなく参照によって渡された場合、参照タイプのパフォーマンスの障害(そしてもちろん、既存のicomparableとの互換性を犠牲にして、値タイプのパフォーマンスが強化されます。u003CT>とicompareru003CT> )。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top