所以我有一个提供给我的名为 AbstactSearchWithTwoLevelCache 的抽象类。它的所有抽象属性都只有读取权限(使用 get;)。我不允许添加集合;到那些抽象属性。有没有办法在派生类 SearchWithTwoLevelCache 中改变它?换句话说,有没有办法在派生类中设置这些属性?
问问题
172 次
2 回答
1
我无法想象一种方法可以直接覆盖它们。间接地,当您覆盖抽象类属性时,Getter 可以从私有字段中检索,然后您可以创建具有设置这些字段的 Setter 的新属性。
我知道的那种钻机。也许有一种更优雅的方式来解决这个问题。
于 2013-06-25T11:02:55.907 回答
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 { ... }
}
}
然而,这绝不是一个优雅的解决方案。然后,真正的答案变成你不能真正做到这一点(至少在没有上述工作的情况下不能)。
于 2013-06-25T11:00:38.023 回答