文章出處

1. 簡單示例

// 定義結構
public struct Person
{
    public string name;
    public int age;
}

class Program
{
    static void Main(string[] args)
    {
        Person p = new Person();    // 實例化結構
        p.name = "Rain Man";
        p.age = 26;
        Console.WriteLine(p.name + ", " + p.age.ToString());    // 輸出: Rain Man, 26
    }
}

2. 結構的構造函數

結構同樣可以擁有構造函數,例如上例可以使用下面的程序實現;

public struct Person
{
    public string name;
    public int age;
    public Person(string n, int a)
    {
        this.name = n;
        this.age = a;
    }
}

class Program
{
    static void Main(string[] args)
    {
        Person p = new Person("Rain Man", 26);            // 實例化并調用構造函數
        Console.WriteLine(p.name + ", " + p.age.ToString());    // 輸出: Rain Man, 26
    }
}

3. 結構的實例化可以不使用 new 關鍵字

public struct Person
{
    public string name;
    public int age;
    public Person(string n, int a)
    {
        this.name = n;
        this.age = a;
    }
}

class Program
{
    static void Main(string[] args)
    {
        Person p;    // 由于未使用new關鍵字,因此不會調用Person的構造函數
        p.name = "Rain Man";
        p.age = 26;

        Console.WriteLine(p.name + ", " + p.age.ToString());    // 輸出: Rain Man, 26
    }
}

4. 結構的運算符重載

public struct Person
{
    public string name;
    public int age;
    public Person(string n, int a)
    {
        this.name = n;
        this.age = a;
    }

    // 運算符重載必須為:static
    // 函數的返回類型為: Person
    // 函數的參數類型為: Person
    public static Person operator +(Person p1, Person p2)
    {
        Person p;
        p.name = p1.name + " and " + p2.name;
        p.age = p1.age + p2.age;
        return p;
    }
}

class Program
{
    static void Main(string[] args)
    {
        Person p1 = new Person("Tom", 26);
        Person p2 = new Person("Jerry", 10);

        Person p = p1 + p2;   // 使用運算符(+)重載
        Console.WriteLine(p.name + ", " + p.age.ToString());    // 輸出: Tom and Jerry, 36
    }
}

5. 結構與類的區別

從上面的示例可以看出結構和類很相似,一般來講結構能夠實現的功能,類都可以實現。 結構體作為一種自定義的數據類型,具有以特點:

  • 值類型,相比“類”而言對內存開銷較小;
  • 不能夠繼承,不能夠作為一個類的“基類”;
  • 結構體繼承自object類。

文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()