相关疑难解决方法(0)

当用作泛型类型参数时,为什么"动态"不是所有类型的协变和逆变?

我想知道在用作泛型类型参数时是否dynamic在语义上等效object.如果是这样,我很好奇为什么存在这种限制,因为在为变量或形式参数赋值时两者是不同的.

我在C#4.0中编写了一个小实验来梳理一些细节.我定义了一些简单的接口和实现:

interface ICovariance<out T> { T Method(); }

interface IContravariance<in T> { void Method(T argument); }

class Covariance<T> : ICovariance<T>
{
    public T Method() { return default(T); }
}

class Contravariance<T> : IContravariance<T>
{
    public void Method(T argument) { }
}
Run Code Online (Sandbox Code Playgroud)

实验的有趣细节:

class Variance
{
    static void Example()
    {
        ICovariance<object> c1 = new Covariance<string>();
        IContravariance<string> c2 = new Contravariance<object>();

        ICovariance<dynamic> c3 = new Covariance<string>();
        IContravariance<string> c4 = new Contravariance<dynamic>();

        ICovariance<object> c5 = new Covariance<dynamic>();
        IContravariance<dynamic> …
Run Code Online (Sandbox Code Playgroud)

.net c# generics dynamic c#-4.0

22
推荐指数
1
解决办法
1293
查看次数

标签 统计

.net ×1

c# ×1

c#-4.0 ×1

dynamic ×1

generics ×1