Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.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#_Class_Type Conversion - Fatal编程技术网

C#:将超类转换为子类

C#:将超类转换为子类,c#,class,type-conversion,C#,Class,Type Conversion,我使用了一个类(超类)。出于自己的目的,我设计了一个子类,它为我添加了传统信息 class SuperClass{ } class SubClass: SuperClass{ } 现在我的问题是,在运行时,我想将超类的实例转换为子类的实例。对它执行一些操作,然后返回到超类。所以我的问题是,如何才能将SueprClass的实例转换成SubClass的实例 SubClass newItem = superClass as SubClass; 如果您正在使用的实例已初始化为超类,则无法神奇地将其

我使用了一个类(超类)。出于自己的目的,我设计了一个子类,它为我添加了传统信息

class SuperClass{
}

class SubClass: SuperClass{
}
现在我的问题是,在运行时,我想将超类的实例转换为子类的实例。对它执行一些操作,然后返回到超类。所以我的问题是,如何才能将SueprClass的实例转换成SubClass的实例

SubClass newItem = superClass as SubClass;

如果您正在使用的实例已初始化为
超类
,则无法神奇地将其转换为
子类
的实例,从而将整个类型系统抛出窗口

但是,您可以添加一种将
超类
转换为
子类
的方法,但您必须为此编写代码

一种方法是向
子类
添加构造函数,该构造函数接受
超类
的一个实例以及
子类
需要的任何附加信息(如果它不需要附加信息,也许您最好使用扩展方法而不是继承)。

另一种方法是编写转换运算符。

到目前为止您尝试了什么?JGFI。。。这个问题在这里已经被问过很多次了。在代码示例中,is
superClass
a
superClass superClass=new superClass()
或a
超类SuperClass=新的子类()?如果您从未使用过
新的子类(…)
您就不能这样做(当然,没有操作符);您可以1:将其更改为
SubClass SubClass=newsubclass()(一切都应该继续工作),或者2:在子类中创建一个构造函数,该构造函数接受一个超类,并执行
子类SubClass=新的子类(超类)如果您需要保留已存储在超类中的数据,并且无法说出类似subClass.base=superClass的内容;我的意思是subClass.base应该与超级类完全相同,但不确定您在这里问什么。在
子类中是否有名为
base
的属性?否,在c#base访问基类中,它与在cpp super访问基类中相同superclass@Dominick我理解c#,我知道
base
关键字是什么,我很难理解你的问题。您在问题的注释中写道,您正在使用
超类
构造函数初始化
超类
的实例-因此它是
超类
的实例,而不是
子类
的实例。为了能够将其转换为
子类
,您必须编写这样做的代码,或者使用
子类
构造函数简单地初始化它:
var superClass=new SubClass()使用
超类的任何代码
仍应能够使用此实例。。。