Как избежать бесконечного цикла при переопределении виртуального свойства?

2

Можно ли игнорировать набор и получить, когда я назначаю или получаю значение?

В частности, я наследую от класса, у которого есть свойство, объявленное следующим образом:

virtual public Int32 Value { get; set; }

Что бы я хотел сделать, это переопределить его и сделать что-то полезное в этих наборах и get's. Проблема возникает, когда я переопределяю ее, мне также нужно назначить вручную или вернуть значение из свойства. Если я сделаю что-то вроде этого:

override public Int32 Value
{
    get
    {
        return this.Value;
    }
    set
    {
        this.Value = value;
        // do something useful
    }

Затем я создаю бесконечный цикл. Есть ли способ установить или получить значение без вызова кода в set и get, или мне нужно сделать отдельное имя для фактической переменной?

Теги:

2 ответа

6
Лучший ответ

Вместо использования this.Value вы должны использовать base.Value. Это приведет к восстановлению/установке свойства в базовом классе.

Обратите внимание, что базовый метод действительно должен быть переопределяемым (virtual или abstract); в вашем примере это не так. Если базовый метод не является виртуальным, вы просто получите ошибку компилятора при попытке переопределить в производном классе.

  • 0
    Ну, это на самом деле виртуальный, я просто забыл напечатать здесь, большое спасибо.
1

Ключевое слово, которое вы используете, base, описано здесь. Это заставляет компилятор разрешить ссылку на свойство, определенную в базовом классе. Эквивалент VB.NET - это MyBase.

Таким образом:

get 
{ 
    return base.Value; 
} 
set 
{ 
    base.Value = value; 
    // do something useful 
} 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню