.net 为什么我的convarian(out关键字)不工作?

vatpfxk5  于 2023-01-31  发布在  .NET
关注(0)|答案(2)|浏览(152)

如何使用协方差(关键字)?我不知道。
我知道接口中的out关键字意味着协方差,它允许你使用一个比泛型参数指定的更派生的类型。所以我把泛型设置为对象,把返回类型设置为字符串。因为字符串是对象的子类。但是我试过了,它不起作用。

public interface IMyInterface<out T>
{
    public T Foo();
}

public class CovarianceTest : IMyInterface<object>
{
    public string Foo()
    {
        return "abc";
    }
}
zxlwwiss

zxlwwiss1#

协方差,允许您使用比泛型参数指定的类型派生更多的类型
这不是它的意思,你仍然需要编写与接口中的类型相匹配的方法,所以你必须这样做:

public class CovarianceTest : IMyInterface<string>
{
    public string Foo()
    {
        return "abc";
    }
}

协方差允许你做的是把类示例赋给一个变量,这个变量被定义为一个不太具体的接口,如下所示:

IMyInterface<object> x = new CovarianceTest();
    
Console.WriteLine(x.Foo());

这是因为从接口读取的所有T(即取out)都保证是与不太具体的类型类型兼容的示例,即所有字符串也都是对象。

3okqufwl

3okqufwl2#

我怀疑你是想做以下事情。

public interface IMyInterface<out T>
{
    public T Foo();
}

public class CovarianceTest : IMyInterface<string>
{
    public string Foo()
    {
        return "abc";
    }
}

IMyInterface<string> works = new CovarianceTest();
IMyInterface<object> alsoWorks = new CovarianceTest();
IMyInterface<int> doesNotWork = new CovarianceTest();

相关问题