gpt4 book ai didi

c# - 类代替接口(interface)失败

转载 作者:行者123 更新时间:2023-12-02 04:51:35 24 4
gpt4 key购买 nike

interface I1
{
}
class ClassOfI1 : I1
{
}

interface I2
{
I1 ABC { get; set; }
}
class ClassOfI2 : I2
{
public ClassOfI1 ABC { get; set; }
}

抛出以下错误:

'ns.ClassOfI2' does not implement interface member 'ns.I2.ABC'. 'ns.ClassOfI2.ABC' cannot implement 'ns.I2.ABC' because it does not have the matching return type of 'ns.I1'.

为什么? (有没有办法解决这个问题?我想要 ClassOfI1,而不仅仅是界面。)

最佳答案

实现接口(interface)时,返回类型必须完全匹配。 C# 不支持返回类型协变。因此,您的实现应该是:

class ClassOfI2 : I2
{
public I1 ABC { get; set; }
}

即使这样做,您的代码也会不安全,因为您可以:

public class Other : I1 { ... }
I2 iface = new ClassOfI2();
iface.ABC = new Other();

您可以考虑使用泛型:

interface I2<T> where T : I1
{
T ABC { get; set; }
}

class ClassOfI2 : I2<ClassOfI1>
{
public ClassOfI1 ABC { get; set; }
}

关于c# - 类代替接口(interface)失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18751155/

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