オブジェクト
変数とメソッドをセットにしたもの。
クラスの定義
アクセス修飾子 class クラス名{}
クラス名は大文字で始める。
クラスのインスタンス化
new クラス名() でインスタンス化する。
クラス名() でコンストラクタが呼ばれる。
コンストラクタに引数がある場合は通常のメソッド同様、()内に記述する。
1 2 3 4 5 6 7 8 |
//varを使ったインスタンス化。右側にクラス名を記述するため、通常varが使われることが多い。 var animal1 =new Animal(); //varを使わないインスタンス化。 Animal animal1 =new Animal(); //ターゲット型からのnew型推論(C#9.0~)。varが使えないフィールドや、メソッドの引数で便利 Animal animal1 =new (); |
メンバー
クラスの構成要素。フィールド、メソッド、イベントなどがある。
フィールド
クラス内の変数。
オブジェクトが存在する限り値が保持される。
コンストラクタ
フィールドの初期化をするメソッド。
入力チェックなどもここでする。
クラス名と同じ名前。
インスタンスを生成すると最初に実行される。
1 2 3 4 5 6 |
//コンストラクタの定義(クラス内に記述) //thisはなくてもよい public クラス名(型 変数名){this.フィールド名 = 変数名} //コンストラクタの呼び出し(クラスのインスタンス化の際に呼ばれる) var 変数名 =new クラス名(コンストラクタの引数); |
1 2 3 |
public Player(string name){this.name = name;} var player1 =Player("勇者"); |
this
クラスの現在のインスタンスを参照するときに付け加えるキーワード。
アクセス修飾子
private 宣言されているクラスなどの内側からのみアクセスできる
public どこからでもアクセスできる
protectedinternal 同じプロジェクト内(正確には、同じアセンブリ内の任意のコードから参照可能)
protected internal
private protected
フィールドは基本的にprivateにする(カプセル化)
アクセス修飾子の省略
フィールド、コンストラクタ、メソッドのアクセス修飾子を省力するとprivateになる。
クラスのアクセス修飾子を省略するとinternalになる。(同じプロジェクト内からアクセス可能)
static
フィールドやメソッドにつけると、個別のインスタンスに依存しないフィールドやメソッドになる。
(個別の値を持っていたり、その値を読み書きしたりしない)
staticなフィールド/メソッドはクラスのインスタンス間で共有される。
インスタンス化しなくても呼び出せる。
呼び出すときはクラス名.staticフィールド/メソッド名
呼び方いろいろ
staticフィールド・staticメソッド
静的フィールド・静的メソッド
クラスフィールド・クラスメソッド
例
Console.WriteLine();
ConsoleクラスのWriteLineメソッドはsaticメソッドなのでnewでインスタンス化しなくても使える。
引数で与えた文字列をコンソールに表示するという機能は個別のインスタンスに依存しないため、staticで定義されている。
このように、標準で用意されているクラスには静的フィールドや静的メソッドがたくさんある。
プロパティ
privateフィールドの読み書きや計算を実装する機能。
慣例的に大文字で始める。
フィールド名と違っても良い。
get,setにアクセス修飾子をつけられる。
1 2 3 4 5 6 |
private static int count; public static int Count { get {return count;} private set{count = value;} } |
プロパティの省略形(自動実装プロパティ)
値を返す、代入するだけのプロパティの場合省略形で書ける。
内部的にフィールドが自動で実装されるため、フィールドの記述は不要。
コードスニペットprop で簡単に入力できる。
1 |
public static int Count{get; private set;} |
詳しくは以下を参照
【C#】クラスの作成