C#メモ
リテラル
C#の整数リテラルはint uint long ulongの順に当てはめられる。
## ショートサーキット評価
pが```true```ならばqは評価せずとも、```true```
そこで登場するのが短絡評価(サーキット評価)。
サーキット評価は ```p||q```と記述し、pで式の評価が決まるならば、qの評価を行わない。
## 暗黙的型変換
```C#
//コンパイル可能
long longValue = 123131314;
double doubleValue = longValue;
//コンパイル失敗
long longValue = 123131314.1231;
double doubleValue = longValue;
//コンパイル失敗
decimal dValue = 12313;
float f = dValue;
double d = dValue;
### decimal
decimal dValue = 0.01;
int iValue = 100
double doubleValue = 200.2;
float fValue 300.3;
// iValueはdecimalとして評価される。
var sum = dValue + iValue;
// エラー
var sum = dValue + doubleValue;
// エラー
var sum = dValue + fValue;
double
decimalがオペランドに含まれていない場合、もう一方のオペランドはdoubleに変換される。
float
decimal, floatがオペランドに含まれていない場合、もう一方のオペランドはfloatに変換される。
ulong
上記の場合以外、もう一方のオペランドはulongに変換される。 ただし、符号付型(sbyte, short, int long)の場合はエラーが発生する。
long
上記以外の場合、もう一方のオペランドはlongに変換される。
uint
上記以外の場合、一方のオペランドがsbyte, short, intの場合両オペランドがlong型に変換される。
uint
上記以外の場合、もう一方のオペランドもuintに変換される。
int
上記以外の場合、もう一方のオペランドはintに変換される。
注意点
byte b = 10;
int i = b + b;
// intに変換されるためキャストが必要
byte b2 = (byte)(b+ b);
char c = (char)(b+ b);
単項演算子でも型変換は発生する。
byte b = 10;
int i = -b;
uint ui = 10;
//uintはlongに変換される。
long l = -10;
Switch
C#のSwitchは言語仕様で、あるcaseで処理が行われたら必ずbreakしなければならないと決められている。defaultでもこれは必須となっている。
C#のガベージコレクション
そのインスタンスがどこからも参照されなくなったらガベージコレクトされる。
デストラクタ
~ クラス名() {
}
ガベージコレクトされる際に呼ばれる。Javaと同様必ず呼び出される保証はないので、基本使用しない。
多次元配列
int[,] table = new int[10, 20];
int[,,] tripleTable = new int[10, 20, 30];
ジャグ配列
int[3][] jagged = new int[3][];
jagged[0] = new int[2];
jagged[1] = new int[3];
jagged[2] = new int[4];
jagged
[][]
[][][]
[][][][]