在
大家應該很熟悉Duck的例子了吧?
public abstract class Duck
{
public abstract void Quack();
}
public class MallardDuck : Duck
{
public override void Quack()
{
Console
}
}
public class RubberDuck : Duck
{
public override void Quack()
{
Console
}
}
public class Program
{
public static void Main()
{
Duck duck = new MallardDuck();
duck
duck = new RubberDuck();
duck
Console
}
}
MallardDuck和RubberDuck雖然都繼承自抽象類Duck
多態的這些特性使依賴注入和面向抽象編程成為可能
不一樣的多態
然而
泛型體現了參數的多態性
類型參數在泛型中通常解釋為占位符
public class MyList<T>
{
private T[] items;
private int size;
public void Add(T item)
{
if (size == items
{
// modify capacity
}
items[size++] = item;
}
}
如果我們使用MyList
您是否也覺得這是多態性的一種體現呢?
再來看看十分經典的Swap
public class Swapper
{
private static void Swap<T>(ref T o
{
T temp = o
o
o
}
}
Swap
委托體現了方法的多態性
委托是對擁有相同參數和返回值的所有方法的封裝
public delegate void FooDelegate(List<string> list
public class DelegateTest
{
public void AddToList(List<string> list
{
list
}
public static void PrintIfContains(List<string> list
{
if (list
Console
}
}
public class Program
{
public static void Main()
{
List<string> list = new List<string>();
list
DelegateTest delegateTest = new DelegateTest();
FooDelegate fooDelegate = new FooDelegate(delegateTest
fooDelegate += new FooDelegate(DelegateTest
fooDelegate(list
Console
}
}
在上例中
您是否也認為這是方法的多態性的一種體現呢?
多態小結
我們通常所討論的多態
您可能覺得本文缺乏技術含量
From:http://tw.wingwit.com/Article/program/net/201311/11780.html