为什么我不能重载方法使用dynamic
和object
参数。动态和其他类型的过载方法
void Method(dynamic arg) // Member with same signature is already declared
{
Console.WriteLine("Dynamic");
}
void Method(object arg) // Member with same signature is already declared
{
Console.WriteLine("Not Dynamic");
}
但我可以与dynamic
和另一种类型的重载方法除了对象或动态它自己。
void Method(dynamic arg)
{
Console.WriteLine("Dynamic");
}
void Method(string arg)
{
Console.WriteLine("Not Dynamic");
}
正如你在第一个例子中看到的,编译器不能区分两个重载。
我想第二个例子不应该工作太多,因为字符串可以发送到两个重载。不过编译器更喜欢用已知类型调用过载。
我已经做了一些测试,看看它是如何工作的。
Method(""); // Prints: Not Dynamic
Method((dynamic)""); // Prints: Not Dynamic
Method(null); // Prints: Not Dynamic
Method(???); // Dynamic for any other type except string and null.
首先考虑例如工作和编译器会决定这样的:
Method(new object());// Prints: Not Dynamic
Method((object)5); // Prints: Not Dynamic
Method(???); // Prints: Dynamic for any other type except object and null.
那么,是混乱的编译器?为什么我不能有这样的重载?
默认的动态类型是'object'。 ([MSDN](https://msdn.microsoft.com/en-us/library/dd264736.aspx)) – adatapost
thanks.this现在有道理。我认为我们有动态的类型。但实际上我们不。这就是为什么我不能使用'typeof(动态)'和默认类型是对象。答案。 @AVD –