2016-06-12 87 views
0

如果可能:为什么通用接口不能实现动态类型?

IList <dynamic> = new List <dynamic>; 

或:

class A <T> 
{ 
A(T){} 
} 

class B: A <dynamic> {} 

。为什么不可能这样做:

class U: IEnumerable <dynamic> {} 

+0

问题的答案是链接http://programmers.stackexchange.com/questions/322034/why-generic-interface-cannot-implement-dynamic-type。 –

回答

1

最简单的思考方式 - 动态不是一种类型

dynamic是一个编译器指令,关闭所有编译时检查,并在运行时实现它们。

当你声明一个变量的动态:

dynamic t = 123; 

t = t.Length; // crashes at runtime 

实际上你是在声明变量为System.Object,则表达式关闭所有编译时检查其涉及到的变量:

object t = 123; 

unchecked_for_errors 
{ 
    t = t.Length;  
} 

你不能使用<dynamic>就好像它是一种类型,因为它确实不是一种。

改为使用<object>

+0

你可以在我的问题中明确地看到我正在使用动态作为常规类型。 –

相关问题