C#中三種構造函數的詳細指南和優化方法
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
在C#中,構造函數是一種特殊的方法,用于初始化新創建的對象。當您使用關鍵字“new”創建一個新對象時,構造函數將被自動調用。 構造函數的名稱必須與類名相同,并且它沒有返回類型。構造函數的執行順序是在對象創建時進行的,它用于初始化對象的狀態。C#中的構造函數有三種: 第一種:實例構造函數(Instance Constructor) 當使用new關鍵字創建類的對象時,可以使用實例構造函數來初始化和創建類中的任意成員屬性。下面演示一個名為Man的類,以及類中的實例構造函數: public class Man{ public string Name { get; set; } public int Age { get; set; } public Man(stirng name,int age){ Name =name; Age =age; } } 只要創建Man的對象,就會調用類中的實例構造函數,在實例化對象時將具體的值傳遞給類中的構造函數即可,如下代碼: Man m=new Man("小沈子",25); 第二種:靜態構造函數(Static Constructor) 靜態構造函數用于初始化類中的靜態數據或執行僅需一次的特定操作,靜態構造函數將在創建第一個實例或引用類中的靜態成員之前自動調用。 靜態構造函數具有以下特點: .靜態構造函數不使用訪問權限修飾符修飾或不具有參數; .類或結構體中只能具有一個靜態構造函數; .靜態構造函數不能繼承或重載; .靜態構造函數不能直接調用,僅可以由公共語言運行時調用; .用戶無法控制程序中靜態構造函數的執行時間; 在創建第一個實例或引用任何靜態成員之前,將自動調用靜態構造函數以初始類化; .靜態構造函數會在實力構造函數之前運行; 實例如下: public class MyClass{ public static int num = 0; // 實例構造函數 public Example() { num=1; Console.WriteLine("實例構造函數被調用。"+num); } // 靜態構造函數 static Example() { num=2; Console.WriteLine("靜態構造函數被調用。"+num); } public static void CallStaticConstructor() { Console.WriteLine("調用靜態構造函數。"); } public static void Main() { // 靜態構造函數被自動調用 Console.WriteLine("當程序開始運行時,靜態構造函數會被自動調用。"); // 調用靜態構造函數 Example.CallStaticConstructor(); // 創建類的實例,調用實例構造函數 Example example = new Example(); } } 在這個示例中,靜態構造函數被自動調用一次,當程序開始運行時。當你調用CallStaticConstructor方法時,它不會再次調用靜態構造函數。另外,每次你創建一個類的實例時,實例構造函數都會被調用。 第三種:受保護構造函數(Protected Constructor) 受保護構造函數允許子類訪問它,但不能從類的外部訪問。如果你希望一個類有多個層次結構的實例,但不想從類的外部直接訪問這些實例,那么就可以使用受保護構造函數。下面通過一個實例來展示私有構造函數的使用:
在上面的代碼中,BaseClass有一個受保護構造函數,它接受一個字符串參數。DerivedClass繼承自BaseClass,并且在其公共構造函數中使用受保護構造函數來調用BaseClass的構造函數,同時還輸出了一個消息。在Main方法中,我們創建了一個DerivedClass的實例。在這種情況下,將首先調用DerivedClass的構造函數,然后在其中調用BaseClass的受保護構造函數。 從上面的示例中可以看出,構造函數還可以分為:默認構造函數(無參構造函數)、帶有參數的構造函數和重載構造函數三種。 下面是對這三種構造函數的詳細指南和優化方法: 1、默認構造函數(無參構造函數):
public class MyClass { public int MyVariable { get; set; } public MyClass() { MyVariable = 0; // 設置初始值 } } 2、帶有參數的構造函數:
public class MyClass { public int MyVariable { get; set; } public MyClass(int myVariable = 0) { MyVariable = myVariable; // 使用參數值初始化成員變量 } } 3、重載構造函數:
public class MyClass { public int MyVariable { get; set; }
public MyClass() : this(0) { } // 無參構造函數調用有參構造函數
public MyClass(int myVariable) { MyVariable = myVariable; // 使用參數值初始化成員變量 } } 該文章在 2023/9/25 12:20:05 編輯過 |
關鍵字查詢
相關文章
正在查詢... |