C#メモ
ref/out
C#のメソッドの引数で渡された値や参照は通常コピーされてメソッド内で使用される。そのため、メソッド内で引数に対して操作した内容はメソッド外のスコープに反映されない。
ポインタのようにメソッド内で引数に対する参照を渡し、操作したい場合はref
修飾子を使用する。
refを使用する場合は、必ず参照に値が代入されている必要がある。しかし、メソッド引数に結果を表す変数(isOpenなど)を渡し、メソッドの実行結果を確認したい場合がある。このような引数は実行前には状態が確定しないため、初期化されていない。
この場合はout
修飾子を使用する。
オーバーロード
戻り値の型が異なるだけでは不十分
同一引数を持ち、戻り値の型が異なるメソッドはオーバーロードはみなせない。
暗黙的な型変換
byte型、short型はint型に昇格される。 float型はdouble型に昇格される。 ただし、byte, short, floatを引数にとるオーバーロードメソッドが定義されている場合、そのメソッドが適用される。
void Test(int a) {
}
static void Main() {
byte b = 10;
Test(b); //byteがintに昇格される。
}
ref/outはオバーロードの対象か?
下記オーバーロードは可能
void Test(int a)
void Test(ref int a)
下記オーバーロードは無効
void Test(ref int a)
void Test(out int a)
静的メソッド
静的メソッドはインスタンスメソッドを呼び出すことはできない。静的メソッドは特定のインスタンスに紐づくものではないため。
静的メソッドはstaticなデータのみにアクセスできる。これも上記同様、静的メソッドは特定のインスタンスに紐づく処理ではないため。
静的コンストラクター
クラスがロードされた際に自動的に呼び出される。