マイインターフェース(その一部):インターフェイスパラメータの制約
public interface IRepository
{
Task<T> Insert<T>(T item) where T : class, ISyncable;
}
私の実装:TableOperation.Insert
はITableEntity
などISyncable
public class TableStorageRepository: IRepository
{
public async Task<T> Insert<T>(T item) where T: class, ISyncable
{
TableOperation.Insert(item);
}
}
私の実装では動作しません。
Task<T> Insert<T>(T item) where T : class, ISyncable, ITableEntity;
私の他のIRepository実装が動作しないためe。
その後、制約は、次のエラーが発生しており、もはやインタフェースの制約と一致していないので、私はどちらか私の実装パラメータの制約にITableEntity
を追加することはできません。
「パラメータの型の制約を「Tを'メソッドの...」
これを解決するためのエレガントな方法はありますか?
別のインターフェイス/メソッドを作成できない場合は、実行時エラーが発生して生きていて、それを文書化してください –
実行時に 'TableStorageReposity'で' item'の型をチェックし、渡されたオブジェクトが 'ITableEntity'を実装していない場合は' ArgumentException'を返します... – Michael
ギャップを埋めることは可能でしょうか?実装の詳細を隠す?つまり、 'ISyncable'を実装しているクラスを受け入れ、その差を内部的に扱うということですか? –