当你覆盖你的属性时,你应该写get
和set
。在您的情况下,您创建一个具有相同名称但具有另一个签名的新属性。
您正尝试使用字段覆盖属性
属性提供get
和set
值访问器对字段的访问。请阅读this以更好地了解其中的差异。因为它们不相同,所以IDE建议您使用new
-Keyword隐藏父属性。
如果你想知道为什么
new
关键字在你的情况下不起作用,请阅读this。
在您的问题中,您的代码中的PropertyA
似乎需要在继承的类上设置,但不能从外部更改。所以也许这样做:
public abstract class SampleA
{
// no setter -> cant be changed after initialization
public abstract string PropertyA { get; }
// protected setter -> can only be changed from inside SampleA or Sample
public abstract string PropertyB { get; protected set; }
}
public class Sample : SampleA
{
public override string PropertyA { get; } = "override";
public override string PropertyB { get; protected set; } = "override";
}
像这样做:
public class Sample : SampleA
{
public override string PropertyA { get; set; } = "override";
}
甚至用更多的行为实现它:
public class Sample : SampleA
{
private string _propertyA = "override";
public override string PropertyA
{
get { return _propertyA; }
set
{
// Maybe do some checks here
_propertyA = value;
}
}
}