2013-03-02 67 views
1

我想有一個抽象類和方法簽名像這裏面的抽象方法:基地/派生類型的泛型參數

public abstract IEnumerable<SynchronizeItem<IDataItem>> Sync(IEnumerable<SynchronizeItem<IDataItem>> clientSyncItems); 

在派生類中我要定義的方法類型安全:

public override IEnumerable<SynchronizeItem<AdItem>> Sync(IEnumerable<SynchronizeItem<AdItem>> clientSyncItems) 
{ 
    // Do something with the AdItems 
    _adHandler.Foo(clientItems): 
} 

這是不可能的。任何其他可能達到相同的行爲?我不想將IDataItem的每個用法都轉換爲它在AdHandler類中的具體實現。

回答

1

RENEN的回答不會做的相當你想要什麼,因爲在我看來,你想要的定義具體的類型,而不是呼叫者。要做到這一點,使類型參數的基類,而不是方法的一部分:

public class Base<T> where T : IDataItem 
{ 
    public abstract IEnumerable<SynchronizeItem<T>> Sync(
     IEnumerable<SynchronizeItem<IDataItem>> 
     clientSyncItems); 
} 

而派生類:

public class Derived : Base<AdItem> 
{ 
    public override IEnumerable<SynchronizeItem<AdItem>> Sync(
     IEnumerable<SynchronizeItem<AdItem>> 
     clientSyncItems) 
    { ... } 
} 
2

嘗試定義喜歡你的抽象方法:

public IEnumerable<SynchronizeItem<T>> Sync<T>(IEnumerable<SynchronizeItem<T>> clientSyncItems) where T : IDataItem; 

您的其他方法,實施,是正確的。

相關問題