Может ли получение свойства быть абстрактным, а множество - виртуальным? - PullRequest
7 голосов
/ 06 июня 2010

У меня есть такой базовый класс:

public class Trajectory{
    public int Count { get; set; }
    public double Initial { get; set { Count = 1; } }
    public double Current { get; set { Count ++ ; } }
}

Итак, у меня есть код в базовом классе, который делает набор виртуальным, но get-ы должны оставаться абстрактными. Поэтому мне нужно что-то вроде этого:

...
public double Initial { abstract get; virtual set { Count = 1; } }
...

Но этот код выдает ошибку. Весь смысл в том, чтобы реализовать функциональность счетчика в базовом классе, а не во всех производных классах. Итак, как я могу получить и установить свойство с различными модификаторами?

Ответы [ 3 ]

11 голосов
/ 06 июня 2010

разделить его на 2 функции:

public double Initial
{
    get { return GetInitial(); }
    set { SetInitial(value); }
}

protected virtual void SetInitial(double value)
{
    Count = 1;
}

protected abstract double GetInitial();
1 голос
/ 07 июня 2010

Сделайте это не абстрактным и не виртуальным. И сделайте вспомогательное поле приватным. Таким образом, производный класс не может переопределить его и не может связываться с ним.

0 голосов
/ 07 июня 2010

Нет, вы не можете. По крайней мере, я не нашел решения.

Если свойство помечено как abstract, то ни его геттер, ни сеттер не могут иметь тела.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...