gpt4 book ai didi

c# - 抽象属性的可访问性

转载 作者:行者123 更新时间:2023-11-30 16:36:21 26 4
gpt4 key购买 nike

我有一个抽象类,它的抽象属性被设置为同时具有 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;
}
}

最佳答案

你不应该这样做。你在抽象类中定义 getter 和 setter 的意思是“如果你想从我那里继承,你必须实现这个”。然后你会问,“我怎样才能让派生类忽略这条规则。”

答案是,如果您遇到每个派生类都需要一个 getter 的情况,请将其放在抽象类中,让派生类决定是否通过将其留在抽象类之外来实现 setter。

或者,您可以再创建两个派生自初始抽象类的类,一个实现 setter,一个不实现,然后让您的派生类泛化其中一个有意义的类,但这太过分了我想想。

关于c# - 抽象属性的可访问性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/967306/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com