2011-09-10 17 views
0

別のインタフェースに「Class1のインターフェース1を」:型のプロパティの定義:私は次のようにインターフェイスを実装するいくつかのクラス持っ

class C3 : IclassTemplate { ... } 

class C1 : IpropTemplate { ... } 

class C2 : IpropTemplate { ... } 

: 

はまた別のインタフェースを実装する他のいくつかのクラスがあります

今、IclassTemplateにプロパティのシグネチャを指定して、にIpropTemplateから実装されているプロパティを強制する必要があります。 (等C1又はC2、など)

私はこの試みた:この場合

interface IclassTemplate 
{ 
    ... 
    IpropTemplate prop1 { get; set; } 
} 

class C3 : IclassTemplate 
{ 
    ... 
    public C1 prop1 
    { 
     get; 
     set; 
    } 
} 

を、コンパイラはC3インターフェイス部材IclassTemplate.prop1を実装していないこととC3.prop1が原因IpropTemplate.prop1を実装することができないことを示すエラーを生成します一致する戻り値の型がIpropTemplateではありません。

どうすればよいですか? おかげ

答えて

2

あなたはC1であなたのC3の実装のみ取引をすることはできません - 結局のところ、あなたはこれが有効になることを保証しました:あなただけのことができるようにする必要がある場合は

IClassTemplate c3 = new C3(); 
c3.Template = new C2(); 

財産を読んで、それは少し簡単です:

C3ノウハウでコードをすることができます
interface IClassTemplate 
{ 
    IPropTemplate Template { get; } 
} 

public class C3 : IClassTemplate 
{ 
    private readonly C1 c1 = new C1(); 

    IPropTemplate Template { get { return c1; } } 
} 

それは実際にはC1ですが、まだインターフェイスを実装しています。

別のオプションは、あなたのインターフェースが一般的なようにすることです:

interface IClassTemplate<T> where T : IPropTemplate 
{ 
    T Template { get; set; } 
} 

public class C3 : IClassTemplate<C1> 
{ 
    public C1 Template { get; set; } 
} 

うまくいけば、これらの一つは、あなたのニーズを満たす - 大きな絵を - いない場合は、あなたが本当に達成しようとしているものについての詳細を記入してください。

+0

感謝を行います。私は自分のprogにフィールドを入れなかった。しかしここで私は不用意にコードスニペットを書いた、私はそれを修正しました。 – Mimi

+0

@ミミ:さて、私は編集します。同時にサンプル名を.NETの命名規則に従わせたいかもしれません;) –

0

リターンタイプは、プロパティの署名の一部である - それはタイプIpropTemplateであることがあります。あなたはC1 ANS並びにC2オブジェクトに割り当てることができ

public IpropTemplate prop1 
{ 
    get; 
    set; 
} 

... 
prop1 = new C1(); 
0

C1の代わりに、プロパティ署名にIPropTemplateを記述します。 infernalyの後では、C1型で操作できますが、シグネチャはIclassTemplateがそのように定義したようにインタフェースを公開する必要があります。

0

ただ界面でのフィールドを置くことについてのあなたのヒントの

class C3 : IclassTemplate 
{ 
    ... 
    public C1 prop1 
    { 
     get; 
     set; 
    } 
    public IpropTemplate prop1 {get;set;} 
} 
+1

これはどのように機能しますか?同じクラスに同じ名前の2つの異なるプロパティを持つことはできません。 – BoltClock

関連する問題