この文書の現在のバージョンと選択したバージョンの差分を表示します。
cli:interface [2009/01/31 15:10] 192.168.0.63 |
cli:interface [2013/12/23 09:08] |
||
---|---|---|---|
ライン 1: | ライン 1: | ||
- | ====== interface ====== | ||
- | インターフェイスはC++でいえば、純粋仮想関数のみを含むクラス、のようなものです。キーワードinterface classを用いて定義し、その型は以下の宣言を含むことができます。 | ||
- | * 関数 | ||
- | * プロパティ | ||
- | * イベント | ||
- | もちろん含めることができるのは宣言だけであり、定義することはできません。 | ||
- | C++/CLIのref classはref classに対して単一継承しかできませんが、インターフェースはいくつも多重継承できます。このへんはJavaと同じです。クラスAから派生したクラス Bがあるとし、BはインターフェースIA,IB,ICからも派生しているとするとき、クラスBは以下のように書きます。 | ||
- | <code cpp> | ||
- | interface class IA { | ||
- | public: | ||
- | void funcIA(); | ||
- | }; | ||
- | interface class IB { | ||
- | public: | ||
- | void funcIB(); | ||
- | }; | ||
- | interface class IC { | ||
- | public: | ||
- | void funcIC(); | ||
- | }; | ||
- | ref class A { | ||
- | int i; | ||
- | }; | ||
- | ref class B : A, IA, IB, IC { | ||
- | public: | ||
- | virtual void funcIA() { } | ||
- | virtual void funcIB() { } | ||
- | virtual void funcIC() { } | ||
- | }; | ||
- | int main() { | ||
- | B^ b = gcnew B; | ||
- | | ||
- | IA^ ia = b; | ||
- | IB^ ib = b; | ||
- | IC^ ic = b; | ||
- | b->funcIA(); | ||
- | ia->funcIA(); | ||
- | ib->funcIB(); | ||
- | ic->funcIC(); | ||
- | return 0; | ||
- | } | ||
- | </code> |