generics运行时或编译时多态吗?

我读到以下格式属于参数多态,但是我们可以将它分为一个,运行时或编译时多态吗?

public class Stack { // items are of type T, which is known when we create the object T[] items; int count; public void Push(T item) {...} //type of method pop will be decided when we create the object public T Pop() {...} } 

这两者都有点。 为了使用generics类,您必须在编译时为其提供一个类型参数,但type参数可以是接口或基类,因此在运行时使用的对象的实际具体类型可能会有所不同。

例如,这里我有一段带有Stack字段的代码片段。 我选择使用接口作为类型参数。 这在编译时利用参数多态 。 您必须选择_stack字段在编译时将使用的类型参数:

 public interface IFoo { void Foo(); } public Stack _stack = new Stack(); 

现在,当实际运行这段代码时,我可以使用其类实现IFoo任何对象,并且不必在运行时做出该决定:

 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()); 

这是子类型多态性的一个例子,它在运行时使用。