C# 如何在没有对象初始值设定项的情况下创建实例并添加基类数据
我有一个基类,想创建一个从这个基类继承的新实例。 所以我写了这个Create方法,但是我怎样才能得到基类的数据呢 我不想使用对象初始值设定项 这不起作用(为空): 代码C# 如何在没有对象初始值设定项的情况下创建实例并添加基类数据,c#,oop,inheritance,C#,Oop,Inheritance,我有一个基类,想创建一个从这个基类继承的新实例。 所以我写了这个Create方法,但是我怎样才能得到基类的数据呢 我不想使用对象初始值设定项 这不起作用(为空): 代码 内部类CcuChannelObject:CcuObjectBase,ICcuObject { 公共静态CcuChannelObject创建(CcuObjectBase CcuObjectBase) { var result=new CcuChannelObject(); result.Datapoints=ccuObjectBa
内部类CcuChannelObject:CcuObjectBase,ICcuObject
{
公共静态CcuChannelObject创建(CcuObjectBase CcuObjectBase)
{
var result=new CcuChannelObject();
result.Datapoints=ccuObjectBase.JsonObject.GetDatapoints();
返回结果;
}
公共列表数据点{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 result=CcuChannelObject.Create(yourbaseojbecchere)?与@ZoharPeled相同的问题。调用createclass方法是一个简单的答案,但是您提出问题的方式表明它不是正确的答案。给定您的代码,您试图将ccuObjectBase强制转换为CcuChannelObject,因此要获得null,ccObjectBase必须为null。您为什么还要进行这种转换?如果将基类的属性设计为可访问(公共、受保护),则应该能够从派生类的实例访问它们。因为首先要收集基类中的一些属性,然后才知道它应该是哪种类型的类。所以我想创建这个类,但仍然保留基类的属性。
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; }
}
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);