C#におけるクラス、およびそれに準ずる要素について説明します。
C#におけるクラス
C#はオブジェクト指向型の言語であり、プログラムのすべての要素をオブジェクトとして扱います。そのオブジェクトの設計図となるのがクラスであり、クラスから作られたオブジェクトの実体のことをインスタンスと呼びます。
クラスの宣言
基本書式
[アクセス修飾子] class [クラス名]
{
[フィールドの宣言]
[コンストラクタの宣言]
[メソッドの宣言]
...
}
コード例
public class SampleClass
{
//ここにメソッドなどを記述
}
class予約語に続いてクラス名を宣言して、それ以降を{ }で囲むことでクラスの宣言ができます。C#ではクラス名は先頭を大文字としたキャメル記法で定義するのが推奨されています(名前付けのガイドライン)。また、クラスにアクセス修飾子をつける場合は、classの前に付加します。
コード例では「SampleClass」という名前のクラスを作成しています。
また、{ }の中には次に示すクラスの構成要素を配置することができます。クラスの構成要素にもクラスが含まれていることからわかる通り、クラスは名前空間の中の一番上位の階層だけではなくクラスの中にもサブクラスとして配置することができます。
クラスの構成要素
- フィールド
- プロパティ
- インデクサ
- メソッド
- デリゲート
- イベント
- クラス
- インターフェイス
- 構造体
インスタンスの生成
基本書式
[クラス] [インスタンス名] = new [クラス]([引数1], [引数2], ... );
コード例
SampleClass c = new SampleClass();
クラスからインスタンスを生成する場合はnew演算子を用いて、その引数にはそのクラスのコンストラクタの引数を指定します。コンストラクタに引数が指定されていない場合は、引数なしで( )だけとします。
コード例では「SampleClass」という名前のクラスを「c」というインスタンス名で作成しています。
なお、インスタンスを格納する変数は、データ型が明らかな場合はデータ型を指定せずに var
を用いて暗黙的型指定ローカル変数とすることができます。
var x = new クラス名();
オブジェクト初期化子を用いた構文
var x = new クラス名
{
プロパティ1 = 値1,
プロパティ2 = 値2,
};
この構文を用いることで、インスタンスの生成と同時にプロパティも初期化することができます。
クラスに準ずる要素
構造体
構造体とは、クラスと同様の構造で、値型のものをいいます。クラスと同様にフィールド、メソッド、プロパティ、コンストラクタを持つことができますが、継承することはできません。
構造体は一般的にデータのサイズが小さくて、継承の必要のないデータ構造に用います。
基本書式
struct 構造体名
{
...
}
匿名クラス
型の定義をあらかじめすることなく(従って名前も付いていない)、利用する型を匿名型といいます。
匿名クラスには以下のような制約があります。
- 定義可能なのはパブリック(public)メンバーのみ
- 全てのフィールドは初期化が必須
- static に出来ない
- メソッドの定義も出来ない
基本書式
var x = new { プロパティ1 = 値1, プロパティ2 = 値2 };
- 匿名型は暗黙的型指定ローカル変数(var)を用いて宣言し、new でオブジェクトを作成します
- このとき型名を指定せずに、その場で { } を用いてプロパティを定義します
インターフェイス
インターフェイスは配下のメソッドがすべて抽象メソッドで、多重継承が可能なクラスに準じた構造です。
メソッドはすべて自動的に public abstract であるとみなされるので、アクセス修飾子やabstractキーワードは不要です。
メソッドを実装するときは、インターフェイスを実装されたクラスでそのメソッドをそのまま定義しなすだけで構いません(抽象クラスのようなoverrideキーワードなどは不要です)。
基本書式
interface インターフェイス名
{
抽象メンバの定義
}
インターフェイス名はクラスと区別するためにI~とするのが慣例です。
抽象クラス
抽象クラスはインスタンスを生成出来ないクラスのことで、 継承して使うことを前提としたクラスです。抽象メソッドを1個でも持つクラスが抽象クラスとなり、インスタンスを生成することはできません。また、インターフェイスとは異なり、多重継承はできません。
コメント