備忘録

政治/経済/自動運転/Python/Robotics

interfaceとC#の構造体、列挙型

1.インターフェイス interface

 クラスで実装されるべきメソッドの組み合わせを定義したもので、メソッドの実装をもたない。メソッドの処理の中身は記述しない。基本public。

 public interface ISeries {

    int GetNext ();

    void Reset ();

    void SetStart (int x);

 }

 methodのsignitureだけでなく、property、Indexer、eventといったものも定義できる

 data, constructor, destructor, operator, static memberは不可。

 

2.インターフェイスの実装

 class classname : basename, interfacename {

 //

 }

 参照型の変数で、そのインターフェイスを実装している真意のオブジェクトを参照することができる。

 インターフェイスは継承できるし、その際に隠ぺいもできる。

 

3.インターフェイスのproperty, indexer

 処理の中身は記述しない。

 datatype propertyname { get; set; }

 datatype this [ int index ] { get; set; }

 

4.インターフェイスメンバの明示的な実装

 interfacename.interfacemenber // 完全修飾名をつかうことがある

 これにより2つのメリットがある。

 a) あいまいさの排除

 b) 特殊なアクセス制御:

  クラス型の参照変数からはアクセス不可<仮想private>

  インターフェイス型の参照変数からはアクセス可能

 

5.構造体 struct

 C#の構造体は、参照型ではなく値型のデータをつかう。

 継承には関われない。

 インターフェイスは:で実装できる。

 newを使ってオブジェクトを生成することは必須でなく、newを使わなかった場合はデフォルトのコンストラクタが呼ばれる。

 

6.列挙型 enum

 int型をベースとするが、他の整数型をベースにすることも可能。

 ただしcharは不可。

 その際はべーすとする型を:の後に指定する。