Вопрос о наследовании и свойствах - PullRequest
0 голосов
/ 10 сентября 2011

У меня есть «базовый» класс, который содержит следующие свойства:

    public virtual Vector3b SIZE { get { return new Vector3b(16, 16, 16); } }

    public virtual Vector3b MAX
    {
        get { return new Vector3b(
                    (byte)(this.SIZE.X - 1), 
                    (byte)(this.SIZE.Y - 1), 
                    (byte)(this.SIZE.Z - 1)); 
            }
    }

Теперь, если я переопределил свойство SIZE в моем классе, которое наследует от базового класса, MAX затем вычисляет SIZE из базового класса илииз унаследованного класса (или без него это просто РАЗМЕР)?

РЕДАКТИРОВАТЬ: Забыл упомянуть, Vector3b просто Vector3, но он использует байты вместо float.

Ответы [ 4 ]

6 голосов
/ 10 сентября 2011

Виртуальное свойство или метод по определению отправляет метод на основе типа получателя runtime .В вашем примере, если типом среды выполнения является производный класс, вызывается производное свойство.

0 голосов
/ 10 сентября 2011

MAX будет использовать производный класс SIZE, если тип времени выполнения ссылки this является производным типом.Это называется динамическая отправка виртуальных методов и свойств в зависимости от типа объекта runtime .

class X
{

   public virtual Vector3b SIZE { get { return new Vector3b(16, 16, 16); } }

    public virtual Vector3b MAX
    {
        get { return new Vector3b(
                    (byte)(this.SIZE.X - 1), 
                    (byte)(this.SIZE.Y - 1), 
                    (byte)(this.SIZE.Z - 1)); 
            }
    }
}

class Y : X
{
    public virtual Vector3b SIZE { get { return new Vector3b(26, 26, 26); } }
}

 X x = new X();
 var xmax = x.MAX ;// MAX uses X's SIZE

 Y y = new Y();
 var ymax = y.MAX ;// MAX uses Y's SIZE
0 голосов
/ 10 сентября 2011

Ваш производный класс будет использовать переопределенный РАЗМЕР.

0 голосов
/ 10 сентября 2011

Если вы переопределите виртуальное свойство, унаследованный класс будет использовать все из унаследованного класса.

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