C#基礎增強(3)之值、引用類型及結構體

值、引用類型

介紹

引用類型派生自 System.Object ,而值類型均隱式派生自 System.ValueType 。數組

其實 System.ValueType 也是繼承自 System.Object ,只不過它是特立獨行的一個分支。spa

值類型

數值類型、布爾值、結構、枚舉都是值類型。例:code

[TestFixture]
public class Tests
{
    [Test]
    public void Test()
    {
        // 數值類型
        Console.WriteLine(1 is ValueType); // true
        // 布爾類型
        Console.WriteLine(true is ValueType); // true
        // 結構類型
        Console.WriteLine(new Person() is ValueType); // true
        // 枚舉類型
        Console.WriteLine(EnumTest.Item1 is ValueType); // true
    }
}

public struct Person{}

public enum EnumTest
{
    Item1 = 1
}

引用類型

字符串、數組、類、接口等都是引用類型。對象

值、引用類型的區別

  • 引用類型變量的賦值只會複製對對象的引用,引用的對象存放在堆內存。
  • 值類型變量賦值會深拷貝一個副本,且值類型變量存放在棧內存,且全部的值類型都爲被編譯器識別爲密封類。

結構體

介紹

結構體是一種值類型,它的定義與普通類對象類似,只不過須要將定義類的關鍵字 class 換成 struct 。對於結構體,不像類那樣存在繼承,即一個結構不能從另外一個結構或類繼承。可是結構是從基類 Object 繼承。blog

示例

[TestFixture]
public class Tests
{
    [Test]
    public void Test()
    {
        var person1 = new Person();
        person1.Id = 1;
        person1.Name = "張三";

        Person person2 = person1;
        person1.Name = "李四";
        Console.WriteLine(person2.Name);
        // 張三
        
        Console.WriteLine(person1 is ValueType);
        // True
    }
}

public struct Person
{
    private int id;

    private string name;

    public int Id
    {
        get { return id; }
        set { id = value; }
    }

    public string Name
    {
        get { return name; }
        set { name = value; }
    }
}
相關文章
相關標籤/搜索