gpt4 book ai didi

c# - 为什么我不能将 Foo 转换为 IFoo

转载 作者:行者123 更新时间:2023-11-30 13:17:38 35 4
gpt4 key购买 nike

为什么我不能转换 Foo<Bar>IFoo<IBar> .

如果我尝试我得到:

There is no implicit reference conversion from Foo<Bar> to IFoo<IBar>

最佳答案

如果您使用 C# 4 和 IFoo,它会起作用被声明为:

public interface IFoo<out T>

假设Bar工具 IBarFoo<T>工具 IFoo<T> .

但是,只有在安全的情况下才能这样声明。如果 T安全值“进入”API 以及出来。例如:

public interface IFoo<T>
{
T Value { get; set; }
}

不能在 T 中是协变的,否则你可以写:

public class StringFoo : IFoo<string>
{
public T Value { get; set; }
}

IFoo<string> fooString = new StringFoo(); // That's fine
IFoo<object> fooObject = fooString; // This isn't, because...
fooObject.Value = new Object(); // ... this would violate type safety

阅读 Eric Lippert 的 long blog series on generic variance了解更多信息。

关于c# - 为什么我不能将 Foo<Bar> 转换为 IFoo<IBar>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7444166/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com