두 가지 모두 조금 있습니다. 제네릭 클래스를 사용하려면 컴파일 타임에 유형 매개 변수를 제공해야하지만 type 매개 변수는 인터페이스 또는 기본 클래스 일 수 있으므로 런타임에 사용되는 실제 구체적인 유형의 객체가 다를 수 있습니다.
예를 들어 여기에 Stack<T>
필드가있는 코드 스 니펫이 있습니다. 인터페이스를 type 매개 변수로 사용하기로했습니다. 컴파일시에 parametric polymorphism을 사용합니다. 내가 누구의 클래스 IFoo
를 구현하는 객체를 사용할 수
이제
public interface IFoo { void Foo(); }
public Stack<IFoo> _stack = new Stack<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