2011-07-07 9 views
0

と非ジェネリックインターフェイスのプロパティをオーバーライド私は、次のような二つのインタフェースがあります。ジェネリック1

public interface IEntityViewModel<T> : IEntityViewModel where T : class, ICLEntity 
{ 
    new T Entity { get; set; } 
} 

public interface IEntityViewModel 
{   
    void LoadEntity(int primaryKey); 
    bool? DialogResult { get; set; } 
    ICLEntity Entity { get; set; }   
} 

私はクラスを実装する場合、どのように私はクラスに表示されるエンティティのプロパティがあることを確認することができますがジェネリックT?

ICLEntity IEntityViewModel.Entity 
    { 
     get 
     { 
      return ActiveItem.Entity; 
     } 
     set 
     { 
      ActiveItem.Entity = value as T; 
     } 
    } 

が、その後、私は、私は必要なものではないクラス、2つのエンティティのプロパティを取得:

public abstract class EntityConductor<T> : IEntityViewModel<T> 
    where T : class, ICLEntity 
    { 
     public T Entity 
     { 
      get; set; 
     } 
    } 

コンパイラは、私は例えば、同様IEntityViewModelの実装を追加する必要があります。ここではサンプルクラスです。ジェネリックインターフェイスを実装する場合、EntityプロパティはT型でなければならず、非汎用型の場合はICLEntity型である必要があります。

どうすればいいですか?私は何か簡単なものを逃しています私は.NET 4.0を使用しています、共分散はここで私を助けることができますか?

ありがとうございます!

答えて

0

これはできないと思います。あなたはすでにあなたができる最高のものを持っています。

public abstract class EntityConductor<T> : IEntityViewModel<T> 
    where T : class, ICLEntity 
{ 
    public T Entity { get; set; } 

    ICLEntity IEntityViewModel.Entity 
    { 
     get { return Entity; } 
     set { Entity = (T)value; } 
    } 
} 

これはIEntityViewModelオブジェクトを処理するときに厳密に型指定されたプロパティを使用することができることを確認する必要がありますが、あなただけそれがIEntityViewModelオブジェクトであることを知っていれば、あなたは、弱く型付けされたプロパティを使用することになります。追加のストレージ要件はありませんので、この問題は表示されません。この構造体は、使用シナリオのように見えますが、オブジェクトがありますが、厳密に型指定されたプロパティを使用できるようにするための型情報がない場合があります。

IEntityViewModel.Entityのセッターは、パラメータが間違った型の場合は例外をスローする必要があります。

関連する問題