如果可能:为什么通用接口不能实现动态类型?
IList <dynamic> = new List <dynamic>;
或:
class A <T>
{
A(T){}
}
class B: A <dynamic> {}
。为什么不可能这样做:
class U: IEnumerable <dynamic> {}
?
如果可能:为什么通用接口不能实现动态类型?
IList <dynamic> = new List <dynamic>;
或:
class A <T>
{
A(T){}
}
class B: A <dynamic> {}
。为什么不可能这样做:
class U: IEnumerable <dynamic> {}
?
最简单的思考方式 - 动态不是一种类型。
dynamic是一个编译器指令,关闭所有编译时检查,并在运行时实现它们。
当你声明一个变量的动态:
dynamic t = 123;
t = t.Length; // crashes at runtime
实际上你是在声明变量为System.Object,则表达式关闭所有编译时检查其涉及到的变量:
object t = 123;
unchecked_for_errors
{
t = t.Length;
}
你不能使用<dynamic>
就好像它是一种类型,因为它确实不是一种。
改为使用<object>
。
你可以在我的问题中明确地看到我正在使用动态作为常规类型。 –
问题的答案是链接http://programmers.stackexchange.com/questions/322034/why-generic-interface-cannot-implement-dynamic-type。 –