У меня есть базовый класс "Родитель", как это:
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;
}
}
}
}
}
Обратите внимание, что метод get в Child вызывает метод get of Parent (или, по крайней мере, это то, что я намереваюсь).
Теперь я использую класс «Дочерний», создав его экземпляр, присвоив значение (скажем, 4) его VirtualProperty, а затем снова прочитав свойство.
Child c = new Child();
c.VirtualProperty = 4;
Console.Out.WriteLine("Child.VirtualProperty: " + c.VirtualProperty);
Когда я запускаю это, я, очевидно, получаю ApplicationException, говоря "Dummy Ex". Но , если я установлю точку останова на линии
if(base.VirtualProperty > 0)
в Child и проверьте значение base.VirtualProperty
(наведя на него указатель мыши) до того, как исключение может быть выдано (я предполагаю (d)), я уже получаю исключение. Отсюда я передаю, что утверждение base.VirtualProperty
в «Child-Getter называет себя»; вид.
Я хотел бы добиться того же поведения, которое я получаю, когда меняю определение parentVirutalInt
(в Parent) на защищенное и использую base.parentVirtualInt
в Getter of Child вместо base.VirtualProperty
. И я пока не понимаю, почему это не работает. Кто-нибудь может пролить свет на это? Я чувствую, что переопределенные свойства ведут себя иначе, чем переопределенные методы?
Кстати: я делаю что-то очень похожее с подклассом класса, над которым у меня нет никакого контроля (это главная причина, по которой мой «обходной путь» не подходит).
С уважением