- ちょっとしたことをまとめたやつ(ショートハンドじゃなくて基本的な構文とか載ってるけどきにしない)
- C#に限った話でないけど暗黙的な省略とか糖衣構文ゴリゴリつかったスマートなコードは検索かけづらい!!つらい!
メソッドの宣言
- アクセス修飾子
// アクセス修飾子、返り値型、メソッド名(引数) public int getSum(int arg1,int arg2); // 呼び出し元で引数を設定していない場合の初期値をセットするパターン public int getSum(int arg1 = 0,int arg2 = 0);
オブジェクト(参照型)を文字列として扱う
- 下記はコントロールラベルに文字を出力するソース
// ×:キャスト演算子がこの変換をサポートしておらず実行エラーになる formLabel.text = (string)arr[i]; // △:arr[i]が参照型だったら実行エラーにはならない // 連想配列でarr[i+1]に値型が入っていたら? formLabel.text = arr[i] as String; // ◎:オブジェクト型のクラスに用意されているメソッドで文字列変換してるため // arr[i]の中身のデータ型に依存しないため上記例の中で一番安全 formLabel.text = arr[i].toString();
静的クラスメンバ
public static int a
Visual Studioで任意範囲のソースを折りたためる用にする
//#region以降は任意の文字列を設定可能 #region publicMethod #endregion
varによる動的型変換
- 初見ソース読んでJSかと思って二度見した
//aはint型でコンパイルされる var a = 1;
baseキーワードによる基底クラスのメンバ参照
- baseキーワードで基底クラスを呼ぶことにより実装者はMusicクラスの内部を意識せず開発ができる
オブジェクト指向で隠ぺい化、秘匿性と言われるやつ
public class Musuic { protected string title {get; set;}; protected string artist {get; set;}; public virtual void GetSong() { Console.WriteLine(title + "/" + artist); } } //派生クラス public class DanceMusic : Music { public string genre {get; set;}; public override void GetSong() { //ここで呼ばれるのはMusic(基底)クラス base.GetSong(); Console.WriteLine(genre); } } class MusicOutput { static void main() { DanceMusic edm = new DanceMusic(); edm.title = "Your My Angel"; edm.artist = "Darren Styles"; edm.genre = "UK Hardcore"; //ここで呼ばれるのはDanceMusic(派生)クラス edm.GetSong(); } }
- 出力イメージ
Your My Angel / Darren Styles UK Hardcore
StringBuilderクラスによる文字列操作の高速化
stringクラスは宣言後、値の変更が認められず再代入を行おうとすると新しくオブジェクトが生成される
以下MicroSoft Learnのリンク
NULL条件演算子.?
でNULL参照エラー回避
- 上記演算子が検索かけにくい件
a.?b
の場合、aがNULLならこの式全体はNULLを返す。aがNULL以外ならbの結果を返す。
ラムダ式による匿名関数
- 下記のようなメソッドを省略してかける
public int Add(int x, int y) { int sum; sum = x + y; return sum; } //ラムダ式による匿名関数 //左辺:引数情報(()内は省略可)、メソッドの処理内容 (x , y) => { int sum; sum = x + y; return sum; }; //ふつうは変数sum使わず下記のように記載する (x , y) => {x + y;};
- もう少し実用的なことに掘り下げると、右辺のメソッド処理がデリゲードとして扱われ
Actionオブジェクトに代入される(Actionクラスに処理がカプセル化、秘匿される)