概念
定義為 class 的型別是引用型別。 在執行時,如果宣告引用型別的變數,此變數就會一直包含值 null,直到使用 new 運算子顯式建立類例項,或直到為此變數分配已在其他位置建立的相容型別。
//Declaring an object of type MyClass.
MyClass mc = new MyClass();
//Declaring another object of the same type, assigning it the value of the first object.
MyClass mc2 = mc;
宣告
//[access modifier] - [class] - [identifier]
public class Customer
{
// Fields, properties, methods and events go here...
}
建立
Customer object1 = new Customer();
Customer object2;
Customer object3 = new Customer();
Customer object4 = object3;
建構函式和初始化
建立型別的例項時,需要確保其欄位和屬性已初始化為有用的值。 可透過多種方式初始化值:
- 接受預設值
- 欄位初始化表示式
- 建構函式引數
- 物件初始值設定項
public class Container
{
// Initialize capacity field to a default value of 10:
private int _capacity = 10;
}
public class Container
{
private int _capacity;
public Container(int capacity) => _capacity = capacity;
}
從 C# 12 開始,可以將主建構函式定義為類宣告的一部分:
public class Container(int capacity)
{
private int _capacity = capacity;
}
public class Person
{
public required string LastName { get; set; }
public required string FirstName { get; set; }
}
新增 required 關鍵字要求呼叫方必須將這些屬性設定為 new 表示式的一部分:
var p1 = new Person(); // 編譯發生錯誤!!!
var p2 = new Person() { FirstName = "Grace", LastName = "Hopper" };
繼承
類完全支援繼承,建立類時,可以從其他任何未定義為 sealed 的類繼承。 其他類可以從你的類繼承並替代類虛擬方法。
類可以實現一個或多個介面。
public class Manager : Employee
{
// Employee fields, properties, methods and events are inherited
// New Manager fields, properties, methods and events go here...
}