У меня есть базовый класс и вы хотите создать новый экземпляр, который наследуется от этого базового класса. Поэтому я написал этот Create Method, но как я могу получить данные базового класса.
Я не хочу использовать инициализатор объекта.
Это не работает (равно null):
var result = ccuObjectBase as CcuChannelObject;
Код
internal class CcuChannelObject : CcuObjectBase, ICcuObject
{
public static CcuChannelObject Create(CcuObjectBase ccuObjectBase)
{
var result = new CcuChannelObject();
result.Datapoints = ccuObjectBase.JsonObject.GetDatapoints();
return result;
}
public List<Datapoint> Datapoints { get; set; }
}
Если вы хотите повторно использовать экземпляр CcuObjectBase
возможно, вы должны использовать ассоциацию вместо наследования. Таким образом, ваш класс будет выглядеть так:
internal class CcuChannelObject : ICcuObject
{
private CcuObjectBase _ccuObjectBase;
public CcuChannelObject(CcuObjectBase ccuObjectBase)
{
_ccuObjectBase = ccuObjectBase;
Datapoints = ccuObjectBase.JsonObject.GetDatapoints();
}
public List<Datapoint> Datapoints { get; set; }
}
Код вызова будет выглядеть примерно так:
var ccuObjectBase = new CcuObjectBase();
/*
...
processing to work out what object you want
...
*/
var ccuChannelObject = new CcuChannelObject(ccuObjectBase);
Очевидно, вам нужно будет изменить имена классов в соответствии с новым дизайном.