C#構造函數 -0028

默認構造函數

聲明基本構造函數的語法就是聲明一個與類同名的方法,但該方法沒有返回類型:

public class MyClass
{
	public MyClass()
	{
	}
	// rest of class definition
}

如果沒有提供任何構造函數,編譯器會在後台生成一個默認的構造函數。默認的構造函數,只能把所有的成員字段初始化為標準的默認值。

但是,如果定義了帶參數的構造函數,編譯器就不會自動提取默認的構造函數。

private或protected構造函數

可以把構造函數定義為private或Protected,這樣就限制不相關的類不能訪問它。

比如定義private,

public class MyNumber
{
	private int _number;
	private MyNumber(int number) // another overload
	{
		_number = number;
	}
}

在外部代碼中,不能使用new關鍵字實例化MyNumber;但可以編寫一個公有靜態屬性或方法,以實例化該類,比如單例模式

public class Singleton
{
	private static Singleton _instance;
	private int _state;
	private Singleton(int state) => _state = state;
	public static Singleton Instance => _instance ?? (_instance = new Singleton(42));
}

構造函數中調用其他構造函數

class Car
{
	private string _description;
	private uint _nWheels;
	public Car(string description, uint nWheels)
	{
		_description = description;
		_nWheels = nWheels;
	}
	public Car(string description): this(description, 4)
	{
	}
	// ...
}

通過this關鍵字調用另一個構造函數,這種語法稱為構造函數初始化器。this關鍵字調用參數最匹配的那個構造函數。

注意,構造函數初始化器在構造函數的函數體之前執行。如:

var myCar = new Car("Proton Persona");

會先調用有兩個參數的構造函數,然後調用只有一個參數的構造函數。

靜態構造函數

C#可以給類定義無參數的靜態構造函數,這種構造函數只執行一次。

靜態構造函數只能訪問類的靜態成員,不能訪問類的實例成員。

靜態構造函數不能帶任何參數,一個類也只能有一個靜態構造函數。

在C#中,通常在第一次調用類的任何成員之前,執行靜態構造函數。

public enum Color
{
	White,
	Red,
	Green,
	Blue,
	Black
}

  

public static class UserPreferences
{
	public static Color BackColor { get; }
	static UserPreferences()
	{
		DateTime now = DateTime.Now;
		if (now.DayOfWeek == DayOfWeek.Saturday || now.DayOfWeek == DayOfWeek.Sunday)
		{
			BackColor = Color.Green;
		}
		else
		{
			BackColor = Color.Red;
		}
	}
}

  

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※教你寫出一流的銷售文案?

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※回頭車貨運收費標準

※別再煩惱如何寫文案,掌握八大原則!

※超省錢租車方案

※產品缺大量曝光嗎?你需要的是一流包裝設計!

您可能也會喜歡…