gpt4 book ai didi

c# - 返回实现相同接口(interface)的不同泛型

转载 作者:行者123 更新时间:2023-12-02 15:50:38 26 4
gpt4 key购买 nike

考虑有一个方法

static IEnumerable<IComparable> q()
{
return new List<string>();
}

我试图在我自己的类(class)上实现相同的目标,结果我收到转换错误 cs0266

我尝试这样转换return (Common<Message>)new A();但结果InvalidCastException

interface Common<T> where T : Message
{
T Source { get; }
void Show();
}
interface Message
{
string Message { get; }
}
class AMsg : Message
{
public string Message => "A";
}
class A : Common<AMsg>
{
public AMsg Source => new AMsg();
public void Show() { Console.WriteLine(Source.Message); }
}
static Common<Message> test()
{
return new A(); //CS0266
}

该方法如何返回实现相同接口(interface)的不同泛型?

最佳答案

IEnumerablecovariant这就是第一段代码起作用的原因。要执行相同的操作,您需要通过添加 out 使您的 T 类型参数协变。修饰符:

interface Common<out T> where T : Message
{
T Source { get; }
void Show();
}

现在你可以编写如下代码:

Common<Message> x = new A();

关于c# - 返回实现相同接口(interface)的不同泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57490565/

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