Можно ли игнорировать набор и получить, когда я назначаю или получаю значение?
В частности, я наследую от класса, у которого есть свойство, объявленное следующим образом:
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, или мне нужно сделать отдельное имя для фактической переменной?
Вместо использования this.Value
вы должны использовать base.Value
. Это приведет к восстановлению/установке свойства в базовом классе.
Обратите внимание, что базовый метод действительно должен быть переопределяемым (virtual
или abstract
); в вашем примере это не так. Если базовый метод не является виртуальным, вы просто получите ошибку компилятора при попытке переопределить в производном классе.
Ключевое слово, которое вы используете, base
, описано здесь. Это заставляет компилятор разрешить ссылку на свойство, определенную в базовом классе. Эквивалент VB.NET - это MyBase.
Таким образом:
get
{
return base.Value;
}
set
{
base.Value = value;
// do something useful
}