您的位置:首页 > 编程语言 > C#

c#4.0中的dynamic还是真好用啊,可以实现二元分派

2011-08-04 15:36 465 查看
using System;

namespace Test

{

class Program

{

static void Main(string[] args)

{

var objA = new ObjA();

var objB = new ObjB();

var visitorA = new VisitorA();

var visitorB = new VisitorB();

Test(objA, visitorA);

Test(objA, visitorB);

Test(objB, visitorA);

Test(objB, visitorB);

}

static void Test(IObj obj, AVisitor visitor)

{

visitor.Foo(obj);

}

}

interface IObj

{

void Say();

}

public class ObjA : IObj

{

public void Say()

{

Console.WriteLine("ObjA Say...");

}

}

public class ObjB : IObj

{

public void Say()

{

Console.WriteLine("ObjB Say...");

}

}

abstract class AVisitor

{

public void Foo<T>(T obj) where T : IObj

{

dynamic dObj = obj;

Foo(dObj);

}

protected abstract void Foo(ObjA obj);

protected abstract void Foo(ObjB obj);

}

class VisitorA : AVisitor

{

protected override void Foo(ObjA obj)

{

Console.WriteLine("VisitorA Foo...");

obj.Say();

}

protected override void Foo(ObjB obj)

{

Console.WriteLine("VisitorA Foo...");

obj.Say();

}

}

class VisitorB : AVisitor

{

protected override void Foo(ObjA obj)

{

Console.WriteLine("VisitorB Foo...");

obj.Say();

}

protected override void Foo(ObjB obj)

{

Console.WriteLine("VisitorB Foo...");

obj.Say();

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐