【C# Skills】02 - Structs 結構

結構
就是可以宣告有一個物體,以及這個物體中詳細有什麼樣的屬性
例如:定義一個叫做學生的物體,其中可以詳細的宣告學生會有名字、年齡、身高體重等等

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