2013-06-25 43 views
0

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

+0

也看看这个:[覆盖抽象只读属性读/写属性](http://stackoverflow.com/questions/1489361/override-abstract-readonly-property-to-read-write-property) –

回答

2

如果标记与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 { ... } 
    } 
} 

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

+0

对不起,误解了你的问题。更新了答案。 –

1

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

我知道的钻机种类。也许有更好的方法来解决这个问题。