C#コンストラクション関数-0028

2259 ワード

デフォルトコンストラクタ
基本コンストラクション関数を宣言する構文は、クラスと同じ名前のメソッドを宣言しますが、このメソッドには戻りません.
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キーワード呼び出しパラメータが最も一致する構造関数.
なお、コンストラクション関数初期化器は、コンストラクション関数の関数体の前に実行される.次のようになります.
var myCar = new Car("Proton Persona");

2つのパラメータを持つコンストラクション関数が呼び出され、1つのパラメータのみのコンストラクション関数が呼び出されます.
せいてきこうぞうかんすう
C#はクラスにパラメータのない静的構造関数を定義することができ、この構造関数は一度だけ実行されます.
静的コンストラクション関数は、クラスの静的メンバーのみにアクセスでき、クラスのインスタンスメンバーにアクセスできません.
静的構造関数にはパラメータを持たないでください.クラスには静的構造関数が1つしかありません.
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;
		}
	}
}