C#でinterfaceを作る
C#も他の言語と同様にinterfaceが作成できます。IDisposableを継承したinterfaceを作成し、Dispose()されるか試してみました。
IDisposableを継承したinterface
interface IHoge2: IDisposable { void Foo();//=0は要らない。 new void Dispose();//=0は要らない。 };
C++の場合純粋仮想関数ですが、C#はinterface型宣言なので、=0;
は要らないようです。C#には名前付け方に規則があるようで、interfaceは頭文字を大文字I
2文字目も大文字とする規則です。new void Dispose();
メンバー関数が入っていますが、そもそもIDisposable
interfaceにDispose()
宣言されているので、必要ありません。
IHoge2を継承したclassを作成する
作成したIHoge2を継承したclassを作成する。
class Class1:IHoge2 { public Class1(int i) { } public void Foo() { } public void Dispose() { } }
上記はIHoge2を継承したClass1の実装です。ここでは、IHoge2で宣言したメンバー関数void Foo()
とvoid Dispose()
を実装しています。このClass1クラスをコールするコードを書いてみましょう。
private void Class_test() { using (hoge1.IHoge2 c1 = new hoge1.Class1(0)) { c1.Foo(); } }
ここでの変数を見て頂きたいのですが、変数宣言はhoge1.IHoge2 c1
です。
しかし、実際のインスタンスを作成しているのはnew hoge1.Class1(0)
。
interfaceは変数として利用できます。using (){}
がありますが、このステートメントはIDisposable継承したクラスで利用することができます。
using ステートメントは、ブロック内で例外が発生した場合でも必ず Dispose();がコールされます。