Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 修改派生类中抽象类的访问权限_C#_Properties_Abstract Class - Fatal编程技术网

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

C# 修改派生类中抽象类的访问权限,c#,properties,abstract-class,C#,Properties,Abstract Class,所以我有一个抽象类,名为AbstractSearchWithTwoLevelCache,它是提供给我的。它的所有抽象属性只有读取权限(使用get;)。不允许我添加一个集合;对这些抽象属性的定义。有没有办法在派生类SearchWithTwoLevelCache中更改这一点?换句话说,有没有办法在派生类中设置这些属性?如果用new标记属性,则定义一个新属性,如下所示: abstract class BaseClass { public int Property { g

所以我有一个抽象类,名为AbstractSearchWithTwoLevelCache,它是提供给我的。它的所有抽象属性只有读取权限(使用get;)。不允许我添加一个集合;对这些抽象属性的定义。有没有办法在派生类SearchWithTwoLevelCache中更改这一点?换句话说,有没有办法在派生类中设置这些属性?

如果用
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的新属性


我知道有点像钻机。也许有一种更优雅的方式来解决这个问题。

也看看这个:对不起,误读了你的问题。更新了答案。