汎用抽象クラスを取る汎用メソッドの作成を簡略化できる簡単な方法があるかどうかを知りたいと思います。 それは次のようになります。Cで汎用クラスを持つ汎用メソッド
public J Read<T, M, J>(string fileName) where T : FileAccess<M, J> where M : Accessor where J : new() {
/*More Code... return J*/
}
FileAccessのクラスは、同じ一般的な「引数」を取ります。
public abstract class FileAccess<T, M> : IDisposable where T : Accessor where M : new() {/* More Code*/}
この抽象クラスを実装する他のクラスがあります。例えば
public class StateAccess : FileAccess<XMLAccessor, List<Data>> {/*More Code*/}
倍のC#のほとんどは、あなたが使用している他の一般的なタイプのそれを理解してくれているので、あなたはそれらを記述する必要はありません。
Read<StateAccess>("state");
しかし、その代わりに、これは、私はそれを動作させるために何をすべきかです::私はそれは同じように機能するだろうし、それはこのようなものを終わるだろうと思っ
Read<StateAccess, XMLAccessor, List<Data>>("state");
でもすでにIかかわらず、 XMLAccessorとデータのリストを使用するClass StateAccessを作成しました。
Method Readは、FileAccessorを継承する他のクラスで使用されます。 私の質問は次のようなものです。私はコードの仕組みをどうすれば完成させることができますか?
Read<StateAccess>("state");
Read<OtherAccess>("otherFileName");
ありがとうございました。
私はそれが可愛いとは思わない。 C#では_all_一般的な引数を宣言するか_none_(コンパイラが_all_の引数を単独で推論できる場合)を宣言する必要があります。 c#では、必要な引数のサブセットのみを宣言することはできません。 –
ああ、それは悲しいニュースです。このメソッドを変更する方法はありますか?そのため、ジェネリックは非抽象クラスでなければならず、クラスは非ジェネリックである必要があります。 –