我有一个带有抽象属性的抽象类,该类别设置为获得和设置。我知道我将永远想 得到 该属性来自派生的类,但在某些情况下没有任何意义 该属性在某些类型的派生类中。

我不能仅仅省略派生类中的设置访问者(请参见下面的代码示例)。我可以在派生类中覆盖设置访问者,以无需用用户传递的值做任何事情。但是,是否有另一种方法实际上使特定派生类中的属性仅阅读?最终,我将这些属性显示在属性网格中,我不希望用户将值输入不做任何事情的字段。也许我只是将属性归因于仅在特定的派生类中读取?

另外,我真的很宁愿不要弄乱任何类型的描述符东西,以使属性正确显示在属性网格中,例如“超级” iCustomTypedScriptor。

public abstract class MyClass
{
    public abstract string MyProperty
    {
        get;
        set;
    }
}

public abstract class MyDerivedClass
{
    public override string MyProperty
    {
        //VS complains that the Set accessor is missing
        get;
    }
}
有帮助吗?

解决方案

你不应该这样做。通过在抽象类中定义getter和setter,您要说的是“如果您想继承我,则必须实现此目标。”然后,您问:“如何使派生的类忽略此规则。”

答案是,如果您有每个派生类都需要一个getter的情况,请将其放在抽象类中,并让派生的类决定是否通过将其排除在抽象类中来实现设置器。

或者,您可以创建两个从初始抽象类中得出的类,该类实现了设置器,然后将您的派生类概述为有意义的类别,但我认为这是过分的。

其他提示

看起来像是在寻找 readonly(true)]属性这将显示出您的财产的属性,如Readonly。
但是在您的班级中,您可以像往常一样使用它(带有读写可能性)

您应该使用 abstract 不是 override:

public abstract class MyClass
{
    public abstract string MyProperty
    {
        get;
        set;
    }
}

public abstract class MyDerivedClass
{
    public abstract string MyProperty
    {
        get;
    }
}

但是就像@JP写的那样,您不应该这样做。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top