我想在抽象类和方法签名中有一个抽象方法,如下所示:
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类中的特定实现。
答案 0 :(得分:2)
尝试定义您的抽象方法,如:
public IEnumerable<SynchronizeItem<T>> Sync<T>(IEnumerable<SynchronizeItem<T>> clientSyncItems) where T : IDataItem;
您的其他方法,即实施,是正确的。
答案 1 :(得分:1)
Renen的答案不会完全符合您的要求,因为在我看来,您希望子类定义具体类型,而不是调用者。为此,请将type参数作为基类的一部分,而不是方法:
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)
{ ... }
}