【问题标题】:modifying access permissions from an abstract class in the derived class [duplicate]从派生类中的抽象类修改访问权限[重复]
【发布时间】:2013-06-25 10:58:11
【问题描述】:

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

【问题讨论】:

标签: c# properties abstract-class


【解决方案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 { ... }
    }
}

但这绝不是一个优雅的解决方案。然后,真正的答案就变成了您无法真正做到这一点(至少在没有上述解决方法的情况下不会)。

【讨论】:

  • 抱歉,误读了您的问题。更新了答案。
【解决方案2】:

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

我知道的一种装备。也许有一个更优雅的方式来解决这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 2021-07-15
    • 1970-01-01
    相关资源
    最近更新 更多