Вы пытаетесь переопределить свойство с помощью поля
Свойства предоставляют доступ к полю с помощью методов доступа get
и set
. Пожалуйста, прочитайте это , чтобы лучше понять разницу. Таким образом, поскольку они не совпадают, ваша IDE предложила скрыть родительское свойство с помощью ключевого слова new
.
Если вы хотите узнать, почему ключевое слово 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;
}
}
}