ITメモ
C#




【C#】「C#」のクラス

【C#】
「C#」のクラス










クラスの使い方


クラスの特徴・ルール

・クラスのファイル名と最初のクラス名は、同一の名前にする。
・クラスの中にある同一名関数は「コンストラクタ」という役割があります。


コンストラクタ

「コンストラクタ」は、クラスがインスタンス化されたと同時に実行され関数(処理)です。
クラスがインスタンス化されたときに、初期値を設定したりなど、 何かと便利に使えます。



クラス関連の書式

クラスの書式

public class クラス名
{
クラスのプログラム

public クラス名と同じ名前の関数名(引数){

}
}

public class クラス名(サブクラス) : 継承するクラス名(ベースクラス)
{
クラスのプログラム
}

public class クラス名(サブクラス) : インターフェース名, インターフェース名・・・・
{
クラスのプログラム
}


クラスの使い方(オブジェクトの作成)

クラス名 オブジェクト名= new クラス名();
クラス名 オブジェクト名= new クラス名(引数);
SampleClass SampleObject1 = new SampleClass();

クラスに引数を渡す場合、クラス名と同じ名前の関数の引数として使用することが可能。


クラス内の関数を使用する方法

オブジェクト名.関数名(引数,引数・・・・);
Console.WriteLine(オブジェクト名.関数名(引数,引数・・・・));



「C#」は単一継承

「C#」は単一継承で、
1つのクラスのサブクラスは、何個でも作ることが可能だが、
サブクラスのベースクラスは1つのみ。



クラスのアクセス修飾子

アクセス修飾子説明
private そのクラスのみからのアクセス可能で、「サブクラス」「クラス外」からのアクセスが不可。
protected 「サブクラス」からのみアクセス可能。「クラス外」からのアクセスが不可。
public 「サブクラス」「クラス外」からのアクセスが可能。


Back



「コンストラクタ」と「デストラクタ」


「コンストラクタ」と「デストラクタ」は、
クラスがインスタンスされた時と、クラスのインスタンスが消去される時に、実行される処理のことです。

「コンストラクタ」=クラスがインスタンス化されると同時に実行される処理。
「デストラクタ」=クラスのインスタンスが、使用終了し消去される時に実行される最後の処理。


メモリ使用状況を確認できるメソッド


GC.GetTotalMemory();


コンストラクタ


「コンストラクタ」=クラスの中にある同一名関数。

「コンストラクタ」は、クラスがインスタンス化されたと同時に実行され関数(処理)です。
クラスがインスタンス化されたときに、初期値を設定したりなど、 何かと便利に使えます。





デストラクタ

「デストラクタ」は、インスタンスが消去される時に、最後に実行される処理です。
「C#」の場合は、自動的に「デストラクタ」処理をしてくれるので、改めてコードを記述することはない。
「デストラクタ」処理を記述したい場合は、「~クラス名();」と記述すればよい。


「C#」の場合は、自動的に「デストラクタ」処理をしてくれる仕組みは、
「ガーベージコレクション(garbage collection)」という機能。
「ガーベージコレクション(garbage collection)」は、 「メモリー管理」の仕組みで、メモリ消費が多くなると、定期的に不要なインスタンスを消去してくれる機能が、 「C#」には備わっています。


「デストラクタ」の記述

//クラスを明示的にデストラクタする場合の記述
~クラス名(){
最後に実行したい処理を記述
}


//デストラクタの時に実行したい処理を記述する関数
void IDisposable.Dispose(){
最後に実行したい処理を記述
}



Back



オーバーロード


オーバーロードというのは、
クラス内に、引数の数が異なる同じ名前の関数をいくつも作ることなどを言います。

同じ関数名で、引数の個数が違うものを記述することで、
いくつもの条件で、同じ関数を利用しているような利便性を作ることができます。
引数の数が異なる度に関数名を変える面倒な作業がなくなるというメリットが、
オーバーロードという機能にあります。


オーバーロードの記述例


型名 SampleFunc(int a,int b){

int ans = a+b;

return ans;
}


型名 SampleFunc(int a,int b,int c){

int ans = a+b+c;

return ans;

}

上記のようにクラスに記述しておくことが「オーバーロード」と言います。
「オーバーロード」をしておくことで、
「SampleFunc」関数を利用するときに、引数が2つの場合と3つの場合で、
気にすることなく、同じ関数名で記述して実行することが可能になります。
簡単に言えば、
同じ関数名にしておけば、
引数の数が異なっても、自動的に引数数で判断して使い分けてくれるということです。


Back



静的メンバ


インスタンスを生成しなくても利用できる「フィールド」「メソッド」のことを「静的メンバ」という。

対して、インスタンスが必要な「インスタンスメンバ」。
・インスタンスフィールド
・インスタンスメンバ

静的メンバの特徴

・静的メンバは、インスタンスメンバにアクセスはできない。
・インスタンスメンバは、静的メンバにアクセスできる

「main」メソッドの特徴

プログラム実行時に呼び出される処理が記述される特殊な「main」メソッドも、「静的メンバ」。
・「main」メソッドは、1つのプロジェクトに「1つ」しか作れない。
・「main」メソッドのあるクラスは、1つのネームスペースに1つしか作れない。
・「main」メソッド内で、「main」メソッドが含まれる自信のクラスをインスタンス生成できる。


静的メンバの定義方法

静的メンバは、「static(スタティック)」修飾子を付けて記述するだけで、 簡単に定義できる。。
・静的フィールド
・静的メソッド


静的メンバの呼び出し方

インスタンスを生成せずに、
クラス名.フィールド名;
クラス名.メソッド名(引数);
と記述することで利用できる。
静的メンバは、同一クラス内では、クラス名を省略できる。


Back



インターフェースの使い方


「インターフェース名」は、「I」から始まる名前を使用するのが推奨されている。


インターフェースは、
・メソッドの実装
・フィールド
を持つことができない。
インターフェースのメソッドは、すべて「public」が前提。
なので、アクセス修飾子はインターフェース内ではつけなくてよい。


インターフェースは、メソッドの名前を共有化するだけで、
中身の実行コードは、「インターフェース」を実装したクラス内で同名メソッドを利用して実行コードを記述する。


インターフェースの書式


インターフェースを定義する書式

interface インターフェース名{

インタフェースの中身

}


インターフェースを実装する書式

class クラス名 : インターフェース名, インターフェース名・・・・・・{

//インターフェース内の関数に実行コードを記述する方法
public 型名 インターフェースで宣言した関数名(型名 引数, 型名 引数, ・・・・){

実行コードを記述。

}

}


インターフェースを実装したクラスを実行する書式

static void Main(型名 引数, 型名 引数, ・・・・){

//クラスをインスタンス生成する
クラス名 クラスオブジェクト変数名 = new クラス名関数(引数);
//クラス内のインターフェース関数に実装した関数を実行する書式
クラスオブジェクト変数名.インターフェースで宣言した関数名(引数);
//インターフェースで直接関数を実行する方法
インターフェース名 インターフェースオブジェクト変数名=(インターフェース名)クラスオブジェクト変数名; //インターフェースの関数を直接実行する書式
インターフェースオブジェクト変数名.インターフェースで宣言した関数名(引数);
}


「実装したクラスで関数を実行した場合」と「インターフェース内の関数を実行した場合」、 どちらも同じ結果になる。
クラスでインターフェース関数に実装したプログラムが実行される。



Back