2017-05-15 25 views
0

私はC#でインターフェイスの一部として複数のインデックス付きプロパティを宣言しようとしています。 int v = obj.Field1 [4] + obj.Field2 [4];のようなものを書くことが目的です。デフォルトのプロパティを持つインターフェイスをcli/C++に実装します

実装はC++/CLIで行われます。

は私が Named indexed property in C#?

C#での挙動に近づけるように 'プロキシ' の使用についての情報を見つけた:C++/CLIで

public interface IMyProp1 
{ 
    int this[int idx] { get; } 
} 
public interface IMyProp2 
{ 
    int this[int idx] { get; } 
} 


public interface IMyThing: IMyProp1, IMyProp2 
{ 
IMyProp1 Field1; 
IMyProp2 Field2; 
} 

、私はここにいくつかの情報を見つけました: https://msdn.microsoft.com/en-us/library/2f1ec0b1.aspx しかし、それは私が(VS2015コンパイラの助けを借りて、試行錯誤)

次書いたインタフェース について具体的ではありません

しかし、私は

virtual property int default[int]

が一意であるように私は、2つの異なる動作を実装することができますどのように表示されません。 2「異なる」インターフェースは(私はそれが同じシグネチャだ認める)がある場合でも、私は2つの異なる実装を指定する方法を把握することはできません。

virtual property int IMyProp1::default[int] { int get(int idx) { return fld1[idx]; } 
virtual property int IMyProp2::default[int] { int get(int idx) { return fld2[idx]; } 

私は明示的なインターフェイスの実装については、この情報を見つけましたC++

interface class MyInterface1 { void f(); }; 
interface class MyInterface2 { void f(); }; 
ref class MyClass : MyInterface1, MyInterface2 
{ 
    public: 
    virtual void f1() = MyInterface1::f 
    { 
    Console::WriteLine("MyClass::f1 == MyInterface1::f"); 
    } 

    virtual void f2() = MyInterface2::f 
    { 
    Console::WriteLine("MyClass::f2 == MyInterface2::f"); 
    } 
}; 

しかし、インデックス付きプロパティの署名とそれを混合する方法を把握することはできません。

答えて

0

明示的なプロパティの実装では、各アクセサーメソッドで明示的なオーバーライドを指定します。それだっ

virtual property int Indexer1[int] 
{ 
    int get(int idx) = IMyProp1::default[int]::get { return fld1[idx]; } 
} 
+0

のようなものを試してみてください!私はMSDNからこの情報を見つけられませんでしたが、構文は管理されたC++から変更されたことだけを文書化しましたが、各アクセサをオーバーライドする必要があるとは言及していませんでした。ベンにありがとう! – Laurent

+0

素晴らしい、ありがとう! –

関連する問題