C#动静结合编程之三:Duck Typing
2009-03-26 08:20:24 来源:WEB开发网Duck Typing
但可惜委托还无法覆盖接口或类的所有功能,有朋友提到“接口是对象功能的抽象,而委托是方法功能的抽象”就是这个意思。那么我们自然会想,有没有一种方式,能将委托的思想应用于对象呢?有!它就是:duck typing。前文已经谈到,duck typing关注“对象能做什么”或者说“如何使用对象”,对象继承自什么类,或者实现什么接口并不重要。duck typing的本意为“如果一只动物,走起来像鸭子,叫起来像鸭子,我就可以把它当作鸭子”。与继承性多态相对应,duck typing可以实现非继承多态。按duck typing的本意,那么更纯正的duck typing看起来应该是这个样子:
static void Main(string[] args)
{
object person= new Person();
IPerson duck= Duck.Create<IPerson>(person);//创建鸭子对象
Console.WriteLine(duck.Name + " will be " + (duck.Age + 1) + "next year");
duck.Play("basketball");
Console.WriteLine(duck.Mother);//为null
//duck无法调用duck.Sing()
}
interface IPerson
{
string Name { get; }
int Age { get; }
string Mother { get; }
void Play(string ball);
}
class Person
{
public string Name { get { return "Todd"; } }
public int Age { get { return 26; } }
public void Play(string ball) { Console.WriteLine("Play " + ball); }
public void Sing(string song) { Console.WriteLine("Sing " + song");}
}
更多精彩
赞助商链接