C# のデータ型を理解する前に、次の 2 つの概念を紹介します。
スタック スレッド スタック:スタックはオペレーティング システムによって管理され、マネージド ヒープ上に値の型と参照型を格納するために使用されるアドレスを格納します。スタックはスレッドに基づいており、スレッドにはスタックが含まれます。
GCHeap ヒープ: プロセスの初期化後にプロセス アドレスに基づいて分割されたメモリ空間。.NET ランタイム オブジェクトの格納に使用され、GC によって管理および解放されます。
以下は値型参照型テーブルです。
次のクラスのコンストラクター
public Text()
{
int i = 1;
}
このうち、整数変数 i はスタックに格納されます。
もう 1 つの例は、クラス Test です。上記のことから、このクラスは参照型であり、メモリのヒープ ヒープ アドレスに格納され、クラス内のすべてのフィールドと属性は、ヒープの代わりにヒープに格納されることがわかります。スタック。
class Test {
public int a;
public int A { get; set; }
public string str;
}
このクラスがインスタンス化されると、すべてのメンバーがヒープ メモリに格納されます。
ここまで分かってきましたが、値型と参照型の具体的な違いは何でしょうか?
1 代入方法が異なり、値型に代入する場合は変数の値を直接代入して渡しますが、参照型はヒープ上のアドレスを渡します。
2 継承: 値型は新しい型を派生できず、すべての値型はデフォルトで System.ValueType を継承しますが、構造体はインターフェイスを継承できます。以下はインターフェースを継承し、インターフェースにメソッド、属性、インデクサーを実装した構造です。
interface IFly {
public void Fly();
public string Name { get; set; }
int this[int index] {
get;
set;
}
}
struct Test : IFly
{
public int this[int index] { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
public string Name { get; set; }
public void Fly()
{
}
}
3. デフォルト値: 各値型にはデフォルトのコンストラクタがあり、デフォルト値は 0 で、参照型のデフォルトは null です。
4. 保管場所は言うまでもありません。