Как это:
public class remoteStatusCounts : RemoteStatus
{
public int statusCount;
public remoteStatusCounts(RemoteStatus r)
{
Type t = r.GetType();
foreach (PropertyInfo p in t.GetProperties())
{
this.property(p) = p.GetValue(); //example pseudocode
}
}
}
Пример немного прост (он из API Jira - RemoteStatus имеет 4 свойства), но представьте, что базовый класс имеет 30 свойств. Я не хочу вручную устанавливать все эти значения, особенно если у моего унаследованного класса есть только несколько дополнительных свойств.
Кажется, что отражение намекает на ответ.
Я видел в Использование наследования в конструкторе (publix X (): y) , что я могу вызвать конструктор базового класса (я думаю? Поправьте меня, если я ошибаюсь), но мой базовый класс не нет конструктора - он получен из jira wsdl
public remoteStatusCounts(RemoteStatus r) : base(r) { //do stuff }
редактировать
Я могу представить себе два правильных решения: приведенное выше, и какое-то ключевое слово, например this.baseClass
, которое имеет type(baseclass)
и манипулируется как таковое, действуя как своего рода указатель на this
. Таким образом, this.baseClass.name = "Johnny"
будет точно таким же, как this.name = "Johnny"
Для всех намерений и целей, давайте предположим, что базовый класс имеет конструктор копирования, то есть это правильный код:
public remoteStatusCounts(RemoteStatus r) {
RemoteStatus mBase = r;
//do work
}
edit2
Этот вопрос является скорее мысленным упражнением, чем практическим - для моих целей я мог бы так же легко сделать это: (предполагая, что мой «базовый класс» может делать копии)
public class remoteStatusCounts
{
public int statusCount;
public RemoteStatus rStatus;
public remoteStatusCounts(RemoteStatus r)
{
rStatus = r;
statusCount = getStatusCount();
}
}