<分区>
我已经了解并检查了 C# 4 中 dynamic
关键字的优点。
谁能告诉我这样做的缺点。表示 dynamic
vs Var
/Object
/reflection
???
哪个东西更面糊。 dynamic
在运行时是否更强大?
<分区>
我已经了解并检查了 C# 4 中 dynamic
关键字的优点。
谁能告诉我这样做的缺点。表示 dynamic
vs Var
/Object
/reflection
???
哪个东西更面糊。 dynamic
在运行时是否更强大?
最佳答案
dynamic
关键字最有趣的事情之一是:实现多重分派(dispatch)。
这是一个双分派(dispatch)的例子(多分派(dispatch)的一个具体例子)。在 OOP 中,在运行时根据 one 对象的运行时类型调用虚拟(或抽象)方法的特定实现,该对象作为 this
传递给成员函数。这称为单次分派(dispatch),因为分派(dispatch)取决于单个 对象的运行时类型。在双分派(dispatch)中,它取决于两个对象的类型。
举个例子:
public abstract class Base {}
public class D1 : Base {}
public class D2 : Base {}
public class D3 : Base {}
public class Test
{
public static void Main(string[] args)
{
Base b1 = new D1();
Base b2 = new D2();
Method(b1,b2); //calls 1
Method(b2,b1); //calls 1: arguments swapped!
}
public static void Method(Base b1, Base b2) // #1
{
dynamic x = b1;
dynamic y = b2;
Method(x,y); // calls 2 or 3: double-dispatch - the magic happens here!
}
public static void Method(D1 d1, D2 d2) // #2
{
Console.WriteLine("(D1,D2)");
}
public static void Method(D2 d2, D1 d1) // #3: parameters swapped
{
Console.WriteLine("(D2,D1)");
}
}
输出:
(D1,D2)
(D2,D1)
也就是说,实际方法是在运行时根据两个对象的运行时类型选择的,而不是一个对象。
关于c# - C# 4.0 'dynamic' 关键字的优点和缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8203347/