目次:
定義-可変タイプとはどういう意味ですか?
C#の可変タイプは、プロパティ、データ、フィールドなどのデータメンバーが作成後に変更できるオブジェクトのタイプです。
可変型は、可変値型のオブジェクトが共通言語ランタイム(CLR)によってスタックに保持される並列アプリケーションで使用されます。 これにより、ヒープに割り当てられたオブジェクトよりも高速になる最適化が提供されます。 共有データにアクセスする複数のスレッドが原因で並列アプリケーションで同期エラーが発生するのを防ぐために、可変タイプは何らかのロックメカニズムとともに使用されます。
固有の性質により、可変型データは実行時に変更される可能性があるため、可変型は、オブジェクトに大量の変更可能なデータが含まれている場合によく使用されます。 可変型は、不変型ほどスレッドセーフで安全ではありませんが、スタックに割り当てられる値型の変数で使用されることが多く、パフォーマンスが向上します。
TechopediaでMutable Typeについて説明します
int、doubleなどのすべての組み込み値型は可変型であり、変数の前に修飾子「readonly」を追加することで不変にすることができます。 読み取り専用修飾子で可変参照型が指定されている場合、C#コンパイラーは警告を生成します。 参照タイプのフィールドに読み取り専用修飾子を追加すると、フィールドを参照タイプの別のインスタンスに置き換えることはできませんが、フィールドのインスタンスデータは参照タイプを介して変更できます。
たとえば、StringBuilderは.NETフレームワークライブラリの可変参照型であり、この型から作成されたインスタンスの文字列値は、文字を追加、削除、置換、または挿入することで変更できます。
不変型は、不変型から派生してはなりません。派生クラスの仮想メソッドが不変型メンバーを上書きするようにオーバーライドする可能性があるためです。
可変型の主な制限は、ローカル変数の割り当てまたはメソッドへのパラメーターとして可変型のオブジェクト(構造体など)を渡すときに、オブジェクト自体ではなくオブジェクトの値が転送されることです。 これにより、元のオブジェクトではなく、オブジェクトのコピーが変更されます。 この動作により、予期しないバグが発生する場合があります。
