ParentType obj2 = new ParentType();
ChildType obj1 = obj2 as ParentType;
Наследование и типы в с#
ParentType и ChildType.
ParentType - встроенный тип c#, имеет поля:
-field_1
-field_2
........
-field_n
ChildType наследуется от ParentType, и в него нужно добавить только одно поле:
-child_field
Возникает вопрос при попытке конвертировать ParentType в ChildType:
Код:
Ошибки не возникает, но поля, которые наследуются в obj1 остаются пустыми.
Понимаю, можно сделать метод в классе ChildType:
Код:
public ChildType toChildType(ParentType obj)
{
// переприсвоить поля
return ConvertedObj;
}
{
// переприсвоить поля
return ConvertedObj;
}
но есть ли решение поэлегантнее ? быть может есть интерфейсы которые подразумевают подобные преобразования ?
Заранне спасибо!
З.Ы. Переприсвоить поля не получиться, так как некоторые поля родительского класса только для чтения, соответственно компилятор ругается при попытке присвоения полю которое унаследовалось какого либо значения.
Operator overloading
Цитата:
Note that the assignment operator itself (=) cannot be overloaded.
Как выход создать конструктор в ChildType , принимающий параметром ParentType. ([COLOR="silver"]В с++ после этого не было необходимости перегружать оператор =, хз как в c# [/COLOR])
И либо ChildType obj1 = obj2; должна сработать либо ChildType obj1 = new ChildType(obj2);
решение должно быть тривиальное, просто мозги просто отказываются работать...
может через base как-то добраться можно до родительских свойств ?
1 сохранить ссылку в приватном поле на родительский класс (через конструктор).
2 переопределить все свойства в ChildType и на get возвращать поля скрытой ссылки.
Правда это уже никакое не наследование, но пока сойдет.
Ты не просто изобрел велосипед - ты изобрел велосипед с квадратными колёсами.
Цитата:
ChildType obj1 = new ChildType(obj2);
Сделал по твоим же советам) наследование естессно отпало
[code=c#]
class ChildType : ParentType
{
public ChildType():base()
{
//свои какието вычисления, заполнение недостающих полей.
}
public ChildType(ParentType obj):base(obj)
{
//свои какието вычисления, заполнение недостающих полей.
}
}
[/code]
То что нужно! Спасибо тебе, добрый человек =)