Самое любопытное, что конструкторTwoDShape предполагает получить объект классаTwoDShape,тогда как конструкторTriangle передает ему объект классаTriangle.Как пояснялось выше, такое вполне допустимо, поскольку по ссылке на объект базового класса можно обращаться к объекту производного класса. Следовательно, конструкторуTwoDShape можно на совершенно законных основаниях передать ссылку на объект класса, производного от классаTwoDShape.А поскольку конструкторTwoDShape инициализирует только те части объекта производного класса, которые являются членами классаTwoDShape,то для него не имеет никакого значения, содержит ли этот объект другие члены, добавленные в производном классе.
Виртуальные методы и их переопределение
может быть свой вариант виртуального метода. Кроме того, виртуальные методы интересны тем, что именно происходит при их вызове по ссылке на базовый класс. В этом случае средствами языка C# определяется именно тот вариант виртуального метода, который следует вызывать, исходя из
Метод объявляется как виртуальный в базовом классе с помощью ключевого словаvirtual,указываемого перед его именем. Когда же виртуальный метод переопределяется в производном классе, то для этого используется модификаторoverride.А сам процесс повторного определения виртуального метода в производном классе называется