我有一个抽象类,其抽象属性设置为同时包含Get和Set。我知道我总是希望能够从派生类中获取此属性,但在某些情况下,设置此属性在某些类型中没有意义派生类。
我不能在派生类中省略Set访问器(参见下面的代码示例)。我可以覆盖派生类中的set访问器,以便对用户传递的值不做任何操作。但是有没有另一种方法可以实际使特定派生类中的属性只读?最终我在属性网格中显示这些属性,我不希望用户将值输入到一个什么都不做的字段中。也许我只是将属性作为只读属性在特定的派生类中?
另外,我真的不想弄乱任何类型描述符,以便在属性网格中正确显示属性,例如覆盖ICustomTypeDescriptor。
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;
}
}
答案 0 :(得分:3)
你不应该这样做。你在抽象类中定义你的getter和setter的意思是“你必须实现这个,如果你想继承我的话。”然后你问,“我怎样才能使派生类忽略这个规则。”
答案是,如果你的情况是每个派生类都需要一个getter,那就把它放在抽象类中,让派生类决定是否通过将它从抽象类中删除来实现setter。 / p>
或者,您可以创建另外两个派生自初始抽象类的类,一个实现setter的类,一个不实现setter的类,然后让派生类概括其中一个有意义的类,但这是过度的我认为
答案 1 :(得分:0)
您应该使用abstract
而不是override
:
public abstract class MyClass
{
public abstract string MyProperty
{
get;
set;
}
}
public abstract class MyDerivedClass
{
public abstract string MyProperty
{
get;
}
}
但是像@JP写的那样,你不应该这样做。
答案 2 :(得分:0)
看起来你在寻找 [ReadOnly(true)]属性 这将显示属性网格您的财产,只读 但是在你的课堂上你可以像往常一样使用它(具有读写可能性)