Как переопределить абстрактное свойство? - PullRequest
0 голосов
/ 26 апреля 2019
public abstract class SampleA
{
    public abstract string PropertyA {get;set;}
}

Как переопределить абстрактное свойство A?

enter image description here

Ответы [ 2 ]

1 голос
/ 26 апреля 2019

Вы пытаетесь переопределить свойство с помощью поля

Свойства предоставляют доступ к полю с помощью методов доступа 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;
        }
    }
}
0 голосов
/ 26 апреля 2019

Когда вы переопределяете свою собственность, вы должны написать get и set. В вашем случае вы создаете новое свойство с тем же именем, но с другой подписью.

...