C#基礎—構造函數
轉載自微軟相關官方文檔;
https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/classes-and-structs/using-constructors
每當創建類或結構時,將會調用其構造函數。 類或結構可能具有采用不同參數的多個構造函數。 使用構造函數,程序員能夠設置默認值、限制實例化,並編寫靈活易讀的代碼。
構造函數與該類或結構具有相同名稱,並且通常初始化新對象的數據成員。 其方法簽名僅包含方法名稱和其參數列表;它不包含返回類型。
public class Person { private string last;private string first; public Person(string lastName, string firstName) { last = lastName; first = firstName; } // Remaining implementation of Person class. }
or
public class Location { private string locationName; public Location(string name) => locationName = name;public string Name { get => locationName; set => locationName = value; } }
使用構造函數
通過使用簡單構造函數定義了一個名為 Taxi
的類。 然後使用 new 運算符對該類進行實例化。 在為新對象分配內存之後,new
運算符立即調用 Taxi
構造函數。
public class Taxi { public bool isInitialized; public Taxi() { isInitialized = true; } } class TestTaxi { static void Main() { Taxi t = new Taxi(); Console.WriteLine(t.isInitialized); } }
s
1.通過將構造函數設置為私有構造函數,可以阻止類被實例化——class NLog { private NLog() { } }
構造函數可以將標記為公共,私有,保護,內部,受保護內部或私有受保護。 這些訪問修飾符定義類的用戶構造該類的方式。
2.結構類型的構造函數與類的構造函數類似,但是 structs
不能包含顯式默認構造函數,因為編譯器將自動提供一個顯式默認構造函數。
3.類和 structs
都可以定義帶參數的構造函數。 必須通過 new
語句或 base 語句調用帶參數的構造函數。 類和 structs
還可以定義多個構造函數,並且二者均不需要定義默認構造函數。
4.構造函數可以使用 this 關鍵字調用同一對象中的另一構造函數。 和 base
一樣,this
可帶參數使用也可不帶參數使用,構造函數中的任何參數都可用作 this
的參數,或者用作表達式的一部分。
在執行構造函數塊之前調用基類的構造函數。 base
關鍵字可帶參數使用,也可不帶參數使用。 構造函數的任何參數都可用作 base
的參數,或用作表達式的一部分。
e
默認構造函數
不帶任何參數的構造函數稱為“默認構造函數”。 每當使用 new
運算符實例化對象且不為 new
提供任何參數時,會調用默認構造函數。
如果沒有為類提供構造函數,默認情況下,C# 將創建一個會實例化對象並將成員變量設置為默認值的構造函數。 如果沒有為結構提供構造函數,C# 將依賴於隱式默認構造函數,自動將值類型的每個字段初始化為其默認值。
靜態構造函數
類或結構也可以具有靜態構造函數,該靜態構造函數初始化類型的靜態成員。 靜態構造函數是無參數構造函數。 如果未提供靜態構造函數來初始化靜態字段,C# 編譯器將提供默認靜態構造函數
C#基礎—構造函數