1. 程式人生 > 實用技巧 >C#中的結構及示例

C#中的結構及示例

  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
}
}

  1. 結構的建構函式

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

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
}
}

  1. 結構的例項化可以不使用 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
}

}

  1. 結構的運算子過載

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
}

}

  1. 結構與類的區別

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

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

copy from: https://www.cnblogs.com/rainman/p/3652943.html