修改派生类中抽象类的访问权限

本文关键字:访问 访问权 权限 抽象类 派生 修改 | 更新日期: 2023-09-27 18:19:52

所以我有一个名为AbstractSearchWithTwoLevelCache的抽象类,它的所有抽象属性都只有读取权限(带有get;)。我不允许添加集合;到那些抽象属性。有没有办法在派生类SearchWithTwoLevelCache中更改这一点?换句话说,有没有办法在派生类中设置这些属性?

修改派生类中抽象类的访问权限

如果用new标记属性,则定义一个新属性,如下所示:

abstract class BaseClass
{
    public int Property
    {
        get { ... }
    }
}
class NewClass : BaseClass
{
    public new int Property
    {
        get { return base.Property; }
        set { ... }
    }
}

编辑:

如果基类中的属性不是abstract,则上述操作有效。当它是抽象的时,这将不起作用,因为你需要实现它

abstract class BaseClass
{
    public abstract int Property { get; }
}
class Between : BaseClass
{
    public override int Property
    {
        get { ... }
    }
}
class NewClass : Between
{
    public new int Property
    {
        get { return base.Property; }
        set { ... }
    }
}

然而,这绝不是一个优雅的解决方案。然后,真正的答案是你不能真正做到这一点(至少没有以上的解决方案)。

我无法想象有什么方法可以直接覆盖它们。间接地,当您重写抽象类属性时,Getters可以从私有字段中检索,然后您可以创建具有设置这些字段的Setter的新属性。

我知道有点像钻机。也许还有一种更优雅的方式。