2011-07-07 29 views
0

我有兩個接口,如下所示:重寫非泛型接口特性與通用一個

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?下面是一個示例類:

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

編譯器要求我加入IEntityViewModel實施爲好,例如:

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

但後來我得到的類,它是不是我需要兩個實體屬性。如果實現泛型接口,我需要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中的setter應該在引用類型錯誤時引發異常。