为什么通用接口无法实现动态类型?

时间:2016-06-12 15:02:44

标签: generics c#-4.0 dynamic interface

如果可能的话:

IList <dynamic> = new List <dynamic>;

或:

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

class B: A <dynamic> {}

。为什么不可能这样做:

class U: IEnumerable <dynamic> {}

2 个答案:

答案 0 :(得分:1)

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

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

声明变量dynamic时:

dynamic t = 123;

t = t.Length;    // crashes at runtime

实际上你将变量声明为System.Object,然后关闭涉及该变量的表达式的所有编译时检查:

object t = 123;

unchecked_for_errors
{
    t = t.Length;    
}

您不能将<dynamic>用作类型,因为它实际上并非一个。

改为使用<object>

答案 1 :(得分:0)

请参阅answer上的Software Engineering