Почему требуется явное преобразование для присвоения базового класса производному классу? Но не требуется для обратного

У меня есть базовый класс и производный класс, как показано ниже

public class animal
{
    public string name { get; set; }
}

public class dog : animal
{
    public int age { get; set; }
    public string type { get; set; }
}

uses:

animal a = new animal();

dog d = new dog();

a = d; //compiled

d = a; //Error:Cannot implicitly convert type 'animal' to 'dog'.

d = (dog)a; // compiled

Что происходит внутри, что производный класс может быть присвоен базовому, но требуется обратное явное преобразование? Тот же результат обнаружен, даже если и базовый, и производный класс содержат один и тот же член.

8
задан adatapost 16 December 2011 в 03:07
поделиться