C#言語によるオブジェクト指向プログラミングについてソースコード付きでまとめてみました。
【C#】オブジェクト指向プログラミングとは
オブジェクト指向とは、関連するデータのやそれに対する処理を「オブジェクト」と呼ばれる1つのまとまりで管理する考え方です。
この考え方に沿ってプログラミングすることを「オブジェクト指向」プログラミングといいます。
– | – |
---|---|
オブジェクト | 関連するデータや処理を1つにまとめたモノ。 |
指向 | ある方向・目的に向かうことです。(オブジェクト指向なら、オブジェクトの考え方に重きを置くこと) |
例えば、パソコンをオブジェクトとして考えてみます。
コンピュータ内部のアルゴリズムや電気的な仕組みを理解しなくても、マウスやキーボードの使い方だけを知っていればパソコンを使うことができます。
「パソコン」というオブジェクトは、自身を動作させるための処理を知っています。
それを利用するためには、キーボードやマウスで指示すれば良いです。
このように「データ」と「操作するための処理(メソッド)」を組み合わせが「オブジェクト」です。
【class文】クラス生成
C#では、class文を使ってクラスを生成します。
【書式】
class クラス名 { ここにメソッドなどを記述 }
【field】フィールド修飾子
フィールド修飾子(field modifiers)とは、フィールドの性質を指定するものです。
クラスの宣言時に、フィールド修飾子を指定することで、他のクラスからのアクセスを不可能にしたり、逆に可能にしたりできます。
フィールド修飾子を省略して記述すると、他のクラスからアクセスできなくなります。
【書式】
フィールド修飾子 class クラス名 { ..... }
修飾子 | 意味 | 内容 |
---|---|---|
public | 公開 | どこからでもアクセス可能 |
private | 非公開 | 同一クラス内のみアクセス可能 |
internal | 内部 | 自分自身のアセンブリ内部のクラスからのみ見える |
protected | 保護 | 派生クラスからアクセス可能 |
protected internal | 内部保護 | 派生クラス or 自分のアセンブリ内部のクラスからアクセス可能 |
【参考】アクセス修飾子 一覧
上記の例ではpublicを指定したので、他のクラスから自由にアクセスできます。
【new演算子】インスタンス生成
C#では、 new演算子(new operator)を用いてインスタンスを作成します。new 演算子を用いてインスタンスを生成するには、以下のようなオブジェクト作成式(object creation expressions)を記述します。
オブジェクト作成式
【書式】
型 インスタンス名 = new 型()
型にはclass名を入れます。
【インスタンス変数】メンバ変数
インスタンス変数とは、インスタンス内のみで使えるローカル変数です。
メンバ変数とも呼ばれます。
C#では、class文内でstatic修飾子を指定せずに宣言された変数はインスタンス変数となります。
【インスタンス変数】値の取得
インスタンス変数とは、インスタンス内のみで使えるローカル変数です。
メンバ変数とも呼ばれます。
C#では、インスタンス変数の値を取得するのに演算子「.」を使います。
【書式】
インスタンス名.変数名
【インスタンス変数】代入
インスタンス変数とは、インスタンス内のみで使えるローカル変数です。
メンバ変数とも呼ばれます。
C#では、以下のようにしてインスタンス変数にアクセスして値を代入できます。
【書式】
インスタンス名.変数名 = 値
【コンストラクタ】初期化メソッド
インスタンス変数とは、生成されたインスタンス内のみで使える変数です。
通常、インスタンス毎に異なる値を持たせたい場合に利用します。
インスタンスの生成時にインスタンス変数に値をセット(初期化)できます。
これを行うクラス内のメソッドをコンストラクタ(初期化メソッド) といいます。
C#では、以下のようにしてクラス文内にコンストラクタを定義し、インスタンス変数に値をセットします。
【書式】
/
/ コンストラクタ フィールド修飾子 クラス名(引数) { インスタンス変数 = 引数; }
【method】メソッドの定義・呼び出し
メソッド(method)とは、クラスが持つ関数のことです。
メソッドには操作・処理の内容を記述します。
C#では、以下のようにしてクラス文内にメソッドを定義します。
【書式】
フィールド修飾子 型 メソッド名(引数) { 処理内容 }
メソッドの呼び出し方は以下の通りです。
【書式】
インスタンス名.メソッド名(引数)
【補足】
上記の例では「this.name」「this.type」はTypeFubukiクラス内で定義されたインスタンス変数「name」「type」を表します。
このように、「this.」が付いた変数は、 インスタンス自身を格納する変数となります。
「this.」が付いていない「name」「type」 は、コンストラクターの引数として定義された変数です。
コメント