WEB开发网
开发学院软件开发C语言 C#动静结合编程之三:Duck Typing 阅读

C#动静结合编程之三:Duck Typing

 2009-03-26 08:20:24 来源:WEB开发网   
核心提示: Duck Typing但可惜委托还无法覆盖接口或类的所有功能,有朋友提到“接口是对象功能的抽象,C#动静结合编程之三:Duck Typing(2),而委托是方法功能的抽象”就是这个意思,那么我们自然会想,与继承性多态相对应,duck typing可以实现非继承多态,

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");}

}

上一页  1 2 3 4  下一页

Tags:动静 合编 程之三

编辑录入:爽爽 [复制链接] [打 印]
    赞助商链接