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 クラス内の特定の実装にキャストしたくありません。

4

2 に答える 2

2

次のような抽象メソッドを定義してみてください。

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

あなたの他の方法である実装は正しいです。

于 2013-03-02T13:52:26.977 に答える
1

レネンの答えは、あなたが望むものとはまったく異なります。これを行うには、型引数をメソッドではなく基本クラスの一部にします。

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) 
    { ... }
}
于 2013-03-02T14:59:07.453 に答える