.NET TypeSystem は非常に強力です。次のシナリオを想像してください。私はMyTuple、BCLTupleクラスの不十分にコーディングされたクローンであるという名前のクラスを作成しています。
public class MyTuple<T1, T2> {
public T1 Item1 { get; private set; }
public T2 Item2 { get; private set; }
public MyTuple(T1 item1, T2 item2) {
this.Item1 = item1;
this.Item2 = item2;
}
}
そして、その型のファクトリのようなメソッドT1を作成して、指定せずに型推論システムに正常にフックできるようにしたいことに気付きましT2た。
new MyTuple<int, string>(123, "test"); // which is also a bit redundant
だから私はクラスで話していたメソッドを書いています。クラスを呼び出しましょうFactory:
public class Factory {
public static MyTuple<T1, T2> Create<T1, T2>(T1 item1, T2 item2) {
return new MyTuple<T1, T2>(item1, item2);
}
}
そうすれば、書くときはもっと幸せです:
var tuple = Factory.Create(123, "test"); // and tuple is inferred to be of <int, string>
Factoryに名前を変更するとどうなりますかMyTuple:
public class MyTuple {
public static MyTuple<T1, T2> Create<T1, T2>(T1 item1, T2 item2) {
return new MyTuple<T1, T2>(item1, item2);
}
}
要するに:何も悪いことはありません
2 つの完全に異なるタイプがあるのは、単純なケースです。
- MyTuple (非ジェネリック)
- マイタプル < T1, T2 >
共通点はなく、タイプが異なります。
MyTuple<T1, T2>そして、たまたま延長したと言っていいMyTupleですか?MyTupleまあ、どちらstaticでもない限りsealed、ええ、確かに!
public class MyTuple { ... }
public class MyTuple<T1, T2> : MyTuple { ... }
したがって、あなたの場合、それはMammal拡張Animalまたは...Tiger拡張に他なりませんMammal。Mammal of a weirder sort延長するようなものではありませんMammal of a good ol' classical sort。