.net - 是否可以通过覆盖来将访问器添加到 .NET 中的属性?

标签 .net properties polymorphism overriding accessor

有可能做这样的事情吗?

class A
{
    public virtual string prop
    {
        get
        {
            return "A";
        }
    }
}
class B: A
{
    private string X;
    public override string prop
    {
        get
        {
            return X;
        }
        set
        {
            X = value;
        }
    }
}

也就是说,基类提供了一个只有 GET 访问器的虚拟属性,但子类覆盖了 GET 并提供了一个 SET。

当前示例无法编译,但也许我在这里遗漏了一些东西。

补充:澄清一下,不,我不想用 new 重新定义。我想添加一个新的访问器。我知道它不在基类中,所以它不能被覆盖。好的,让我试着解释一下没有语法糖的情况:
class A
{
    public virtual string get_prop()
    {
            return "A";
    }
}
class B: A
{
    private string X;
    public override string get_prop()
    {
        return X;
    }
    public virtual string set_prop()
    {
        X = value;
    }
}

最佳答案

不,这是不可能的。不幸的是,您甚至无法覆盖和更改访问者级别(例如,从 protected 到公开),如 MSDN 所述。 .我建议您考虑稍微重构代码/类并寻找替代方法来完成此任务,例如使用派生类中的 SetProperty 方法使用 protected 修饰符声明 set 访问器。

关于.net - 是否可以通过覆盖来将访问器添加到 .NET 中的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/545562/

相关文章:

java - java中的过滤属性

java - 如何检查两个二叉搜索树是否具有相同的精确键(忽略值)?

java - 接口(interface)方法返回包含不同对象的ArrayList

c# - SecureString 解决方案很好但有内部矛盾?

c# - 是否可以迭代两个容器?

c# - 如何区分USB设备类型?

c# - 将 Windows 窗体移植到 .Net Standard 2.0

python - 有时只读属性

javascript - 当您将 'print' 发送到屏幕时,如何更改对象属性名称

java - 调用位于另一个类中的另一个函数中的函数