最近、ジェネリックインターフェイスに関する問題が発生しました。私はインターフェイスのリストを作成したかったのですが、一般的なインターフェイスでは簡単ではありません。私はこのようなリストを作成することができた:new List<IModelCreator<IDataCollection>>();
しかし、私は醜いようだと思う。インターフェイスを継承していますが、メソッドをオーバーライドしていません
今私は2つのインターフェイスを持っています。 1つは一般的なものと1つはありません。ここで私は今、使用するインターフェイスは、次のとおりです。
public interface IModelCreator
{
IDataCollection GetModelFromPath(string path);
}
public interface IModelCreator<T>: IModelCreator where T : IDataCollection
{
new T GetModelFromPath(string path);
}
IModelCreator
がモデルにファイルパスをオンにし、T
はそれがになってしまいますモデルであるクラスです。だから今私のクラスでこれを使用し、私はこれを得る:
public abstract T GetModelFromPath(string path);
IDataCollection IModelCreator.GetModelFromPath(string path)
{
return GetModelFromPath(path);
}
(私はそれを要約した)。しかし、これを2の代わりに1つのメソッドにする方法はありませんが、同じ機能を備えていますか?
私は非ジェネリックインターフェイスだけでも試しました。私は、このような抽象クラスがあります。
public abstract class DocumentConverterCreatorBase<T>: IModelCreator where T: IDataCollection
をしかし、私は私のジェネリックT
として戻り値の型を使用することができませんでした。そして私は理由を知らない。
ヒントは:あなたが良いデザインでメンバーの前に 'new'を配置する必要がありません。それはバンドエイドです。 –
@HenkHolterman私はちょっと嬉しかったです。私はそれを思いつくことができたし、私のポストで私が話したリストの変種も出てきた。私はちょうど私が正しい方向に私を助けるいくつかの答えを得ることができることを願っています。 – patrick