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

时间:2013-06-25 10:58:12

标签: c# properties abstract-class

所以我有一个名为AbstactSearchWithTwoLevelCache的抽象类提供给我。它的所有抽象属性只具有读访问权限(带有get;)。我不允许添加一套;到那些抽象的属性。有没有办法在派生类SearchWithTwoLevelCache中更改它?换句话说,有没有办法在派生类中设置这些属性?

2 个答案:

答案 0 :(得分:1)

如果使用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 { ... }
    }
}

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

答案 1 :(得分:1)

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

我知道的那种装备。也许有更优雅的方式。