Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在没有对象初始值设定项的情况下创建实例并添加基类数据_C#_Oop_Inheritance - Fatal编程技术网

C# 如何在没有对象初始值设定项的情况下创建实例并添加基类数据

C# 如何在没有对象初始值设定项的情况下创建实例并添加基类数据,c#,oop,inheritance,C#,Oop,Inheritance,我有一个基类,想创建一个从这个基类继承的新实例。 所以我写了这个Create方法,但是我怎样才能得到基类的数据呢 我不想使用对象初始值设定项 这不起作用(为空): 代码 内部类CcuChannelObject:CcuObjectBase,ICcuObject { 公共静态CcuChannelObject创建(CcuObjectBase CcuObjectBase) { var result=new CcuChannelObject(); result.Datapoints=ccuObjectBa

我有一个基类,想创建一个从这个基类继承的新实例。 所以我写了这个Create方法,但是我怎样才能得到基类的数据呢

我不想使用对象初始值设定项

这不起作用(为空):

代码

内部类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);