У меня есть базовый класс "Родитель", как это:Calling "Base-Getter" в ПРЕИМУЩЕСТВЕННОМ Getter имущества
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class Parent
{
private int parentVirtualInt = -1;
public virtual int VirtualProperty
{
get
{
return parentVirtualInt;
}
set
{
if(parentVirtualInt != value)
{
parentVirtualInt = value;
}
}
}
}
}
и класс ребенка, как это:
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class Child : Parent
{
public override int VirtualProperty
{
get
{
if(base.VirtualProperty > 0)
{
throw new ApplicationException("Dummy Ex");
}
return base.VirtualProperty;
}
set
{
if(base.VirtualProperty != value)
{
base.VirtualProperty = value;
}
}
}
}
}
Обратите внимание, что добытчик в Ребенке зовет получателя Родитель (или, по крайней мере, это то, что я намерен).
Теперь я использую класс «Ребенок», создав его, присвоив значение (скажем, 4) его VirtualProperty, а затем снова прочитав свойство.
Child c = new Child();
c.VirtualProperty = 4;
Console.Out.WriteLine("Child.VirtualProperty: " + c.VirtualProperty);
Когда я запускаю это, я, очевидно, получаю исключение ApplicationException «Dummy Ex». Но если я поставил точку останова на линии
if(base.VirtualProperty > 0)
в ребенке и проверить значение base.VirtualProperty
(при наведении курсора мыши на него) прежде, чем исключение может быть выброшено (я предполагаю, что (г)), Я уже получаю Исключение. Из этого я догадываюсь, что заявление base.VirtualProperty
в «Child-Getter вызывает себя»; вид.
То, что я хотел бы достичь такого же поведение я получаю, когда я изменить определение parentVirutalInt
(в Parent) для защиты и использование base.parentVirtualInt
в добытчике ребенка вместо base.VirtualProperty
. И я пока не понимаю, почему это не работает. Может ли кто-нибудь пролить свет на это? Я чувствую, что переопределенные свойства ведут себя иначе, чем переопределенные методы?
К слову: я делаю что-то очень похожее с подклассифицированием класса, в котором я не контролирую (это основная причина, почему мой «обходной путь» не является вариантом).
Сердечные приветы