gpt4 book ai didi

c# - 在 C# 中扩展抽象类

转载 作者:行者123 更新时间:2023-12-01 05:56:34 25 4
gpt4 key购买 nike

我是一名 Java 开发人员,我注意到在 C# 中扩展抽象类与在 Java 中扩展抽象类存在一些差异。我想知道 C# 开发人员如何实现以下目标。

1) 协方差

public abstract class A {
public abstract List<B> List();
}
public class BList : List<B> {
}
public abstract class C : A {
public abstract BList List();
}

因此,在上面的层次结构中,C 中存在协变,它返回与 A 返回的类型兼容的类型。但是,这在 Visual Studio 中给了我一个错误。有没有办法在 C# 中指定协变返回类型?

2)向属性添加setter

public abstract class A {
public abstract String Name { get; }
}
public abstract class B : A {
public abstract String Name { get; set }
}

这里编译器提示隐藏。有什么建议么?

请不要建议使用接口(interface),除非这是唯一的方法。

最佳答案

不知怎的,我不明白你的意图。为什么不这样解决呢?

public class BList : List<T> where T : B {} same =  public class BList : List<B> {}

public class C : A
{
public override List<B> Liste()
{
return new BList();
}
}

关于你的第二个问题:

在我看来,你想做的事情是糟糕的设计。您可以在两者上使用关键字 virtual 并忽略警告,但为什么要做这样的事情?

public abstract class A
{
public virtual string Name { get; protected set; }

}

public abstract class B : A
{
public virtual string Name { get; set;}
}

关于c# - 在 C# 中扩展抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2771669/

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