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