これは少しです。ジェネリッククラスを使用するには、コンパイル時に型パラメータを渡さなければなりませんが、型パラメータはインタフェースクラスまたは基本クラスであるため、実行時に使用される実際の具体的なオブジェクト型は異なります。
たとえば、ここにコードのスニペットがStack<T>
フィールドあります。私は型パラメーターとしてインターフェイスを使用することを選択しました。これはコンパイル時にparametric polymorphismを使用します。
今
public interface IFoo { void Foo(); }
public Stack<IFoo> _stack = new Stack<IFoo>();
、このコードのスニペットは、実際に私はそのクラスIFoo
を実装する任意のオブジェクトを使用することができ、実行され、その決定は持っていないとき:あなたの_stack
フィールドがコンパイル時に使用するどのタイプのパラメータを選択する必要があります実行時まで行われる。
public class Foo1 : IFoo { public void Foo() { Console.WriteLine("Foo1"); } }
public class Foo2 : IFoo { public void Foo() { Console.WriteLine("Foo2"); } }
public class Foo3 : IFoo { public void Foo() { Console.WriteLine("Foo2"); } }
_stack.Push(new Foo1());
_stack.Push(new Foo2());
_stack.Push(new Foo3());
これは、実行時に利用されるsubtype polymorphism、一例です。
この記事を参照してください。http://blogs.msdn.com/b/ericlippert/archive/2009/07/30/generics-are-not-templates.aspx – Guillaume
@Guillaume素晴らしい、短い記事。私はE.L.で何かを探していました。参考として – FishBasketGordo