gpt4 book ai didi

c# - 在 C# 中向虚拟属性添加 setter

转载 作者:太空狗 更新时间:2023-10-29 17:42:36 25 4
gpt4 key购买 nike

我有这样的情况:

public abstract class BaseClass 
{
public abstract string MyProp { get; }
}

现在,对于一些派生类,属性值是一个合成值,所以没有setter:

public class Derived1 : BaseClass
{
public override string MyProp { get { return "no backing store"; } }
}

这很好用。但是,一些派生类需要更传统的后备存储。但是,无论我如何编写它,如自动属性或显式后备存储,我都会收到错误消息:

public class Derived2 : BaseClass
{
public override string MyProp { get; private set;}
}

public class Derived3 : BaseClass
{
private string myProp;
public override string MyProp
{
get { return myProp;}
private set { myProp = value;}
}
}

Derived2.MyProp.set':无法覆盖,因为“BaseClass.MyProp”没有可覆盖的集合访问器

我如何让它工作?

最佳答案

您能做的最好的事情就是将属性实现为virtual 而不是abstract。为基类中的每个抛出 NotSupportedException 创建 getset block ,并在派生类中相应地覆盖行为:

public virtual string MyProp {
get {
throw new NotSupportedException();
}
set {
throw new NotSupportedException();
}
}

关于c# - 在 C# 中向虚拟属性添加 setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4151573/

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