【问题标题】:Is generics runtime or compile time polymorphism?泛型是运行时还是编译时多态?
【发布时间】:2012-09-24 08:34:27
【问题描述】:

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

public class Stack<T>
{  // 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() 
   {...} 
 }  

【问题讨论】:

标签: c# oop generics polymorphism


【解决方案1】:

两者兼而有之。为了使用泛型类,您必须在编译时给它一个类型参数,但类型参数可以是接口或基类,因此在运行时使用的对象的实际具体类型可能会有所不同。

例如,这里我有一个带有Stack&lt;T&gt; 字段的sn-p 代码。我选择使用接口作为类型参数。这在编译时使用parametric polymorphism。您必须在编译时选择 _stack 字段将使用的类型参数:

public interface IFoo { void Foo(); }

public Stack<IFoo> _stack = new Stack<IFoo>();

现在,当这段代码的 sn-p 实际运行时,我可以使用其类实现 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());

这是subtype polymorphism 的示例,在运行时使用。

【讨论】:

  • 你能提供任何参考吗?
猜你喜欢
  • 1970-01-01
  • 2013-08-29
  • 1970-01-01
  • 2021-02-26
  • 2012-06-26
  • 1970-01-01
  • 2011-09-04
  • 2013-09-17
  • 2011-04-07
相关资源
最近更新 更多