C# 修改派生类中抽象类的访问权限
所以我有一个抽象类,名为AbstractSearchWithTwoLevelCache,它是提供给我的。它的所有抽象属性只有读取权限(使用get;)。不允许我添加一个集合;对这些抽象属性的定义。有没有办法在派生类SearchWithTwoLevelCache中更改这一点?换句话说,有没有办法在派生类中设置这些属性?如果用C# 修改派生类中抽象类的访问权限,c#,properties,abstract-class,C#,Properties,Abstract Class,所以我有一个抽象类,名为AbstractSearchWithTwoLevelCache,它是提供给我的。它的所有抽象属性只有读取权限(使用get;)。不允许我添加一个集合;对这些抽象属性的定义。有没有办法在派生类SearchWithTwoLevelCache中更改这一点?换句话说,有没有办法在派生类中设置这些属性?如果用new标记属性,则定义一个新属性,如下所示: abstract class BaseClass { public int Property { g
new
标记属性,则定义一个新属性,如下所示:
abstract class BaseClass
{
public int Property
{
get { ... }
}
}
class NewClass : BaseClass
{
public new int Property
{
get { return base.Property; }
set { ... }
}
}
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 { ... }
}
}
编辑:
如果基类中的属性不是abstract
,则上述属性将正常工作。当它是抽象的时,这将不起作用,因为您需要实现它。您可以选择在两者之间创建一个类,如下所示:
abstract class BaseClass
{
public int Property
{
get { ... }
}
}
class NewClass : BaseClass
{
public new int Property
{
get { return base.Property; }
set { ... }
}
}
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 { ... }
}
}
然而,这绝不是一个优雅的解决方案。然后,真正的答案是,你无法真正做到这一点(至少在没有上述解决办法的情况下是如此)。我无法想象有什么方法可以直接覆盖它们。间接地,当您重写抽象类属性时,getter可以从私有字段中检索,然后您可以创建具有设置这些字段的setter的新属性
我知道有点像钻机。也许有一种更优雅的方式来解决这个问题。也看看这个:对不起,误读了你的问题。更新了答案。