Это потому, что истинный экземпляр Message
не является ChildMessage
, тогда как экземпляр ChildMessage
является Message
.
Если myParentClass
не является на самом деле экземпляр с ChildMessage
вы не можете использовать оператор приведения для принудительного приведения вперед, поскольку фактический базовый тип равен Message
.
Тем не менее, для использования доступны операторы implicit
и explicit
.на типах, так что вы могли бы, возможно, создать тот, который принимает Message
и выводит ChildMessage
.
http://msdn.microsoft.com/en-us/library/85w54y0a.aspx
Зная, что вам даны эти типы, и у вас естьнет другого выбора, кроме как использовать их, у вас есть два варианта для расширения этого типа.
Первый вариант
Используйте шаблон декоратор / обертка, чтобы обернуть Message
внутри ChildMessage
:
class ChildMessage
{
private Message _innerMessage;
public ChildMessage(Message innerMessage)
{
_innerMessage = innerMessage;
}
}
Затем вы открываете Message
или его свойства через класс ChildMessage
.
Второй параметр
Это также возможно, наследовать от Message
, но когда вы хотите сделать ChildMessage
из Message
, вам нужно будет преобразовать его , а не разыграть его:
class ChildMessage : Message
{
public ChildMessage(Message m)
{
// Instantiate properties by copying from m
}
}