結構
就是可以宣告有一個物體,以及這個物體中詳細有什麼樣的屬性
例如:定義一個叫做學生的物體,其中可以詳細的宣告學生會有名字、年齡、身高體重等等
structs 的特色如下
- structs 沒有無參數建構子
- structs 無法繼承
- structs 是實質類型
public struct Student
{
public string Name { get; set; }
public int Age { get; set; }
public int Tall { get; set; }
}
建構子
struct 如果要寫建構子,就必須要指派全部的屬性
但是不一定要全部的值都從建構子的參數去指派
public Student() { } // 錯誤:沒有assign 所有屬性
public Student(string name) // 錯誤:沒有assign 其他兩個屬性
{
Name = name;
}
public Student(string name) // 正確:雖然只有一個從參數assign,但所有值都被assign
{
Name = name;
Age = 10;
Tall = 130;
}
不能繼承就不解釋了
實質類型
需要先了解 Value Type 跟 Reference Type 差別
var student = new Student { Name = "Bob" ..... };
var student2 = student; // 此行為會複製一份student
student2.Name = "Tom";
Console.Write(student.Name); // output: Bob
Console.Write(student2.Name); // output: Tom,因為複製一份的值是在不同記憶體上,所以修改2 不會影響1
與使用class 不一樣,class 是參考型別
有時候使用class 想要複製物件會進到一個誤區:以為是不同物件但實際上修改會互相影響
也因為是實質類型,生命週期結束之後會直接釋放,可以有助於節省記憶體用量
References:
http://slashview.com/archive2017/20170328.html
https://docs.microsoft.com/zh-tw/dotnet/csharp/language-reference/builtin-types/struct