我有一个继承链,想要获得一个基类实例。代码如下所示:
[Serializable()]
class MyBaseClass {
public MyBaseClass() { /* Ctor implementation */}
public MyBaseClass( someVar ) { /* Ctor implementation */}
public MyBaseClass GetBaseInstance{ return( (MyBaseClass)this ); }
// Base class methods & properties
}
class Level1Class : MyBaseClass {
// Some methods
// Some properties
// Some objects
}
class Level2Class : Level1Class {
// Some more methods
// Some more properties
// Some more objects
}
在我的代码中的某个时刻,我可以访问Level2Class的一个实例,但我需要从MyBaseClass获取一个实例。我需要一个严格的MyBaseClass实例,因为我(尝试)将该实例提供给XML序列化器。 XML序列化是为MyBaseClass定义的,但不是为Level1Class和Level2Class定义的。
我尝试了几件事:
var TheInstance = Level2ClassInstance as MyBaseClass; // return a Level2Class instance
var TheInstance = Level2ClassInstance.GetBase(); // return a Level2Class instance
// The serializer code
FileInfo fobject = new FileInfo( "MyXMLFile.xml" );
XmlSerializer MySerializer = new XmlSerializer( TheInstance.GetType() );
using( StreamWriter xmlStream = new StreamWriter( fobject.FullName ) ) {
MySerializer.Serialize( xmlStream, TheInstance );
}
我想我错过了一些明显的东西......在这种情况下,如何获得MyBaseClass的实例?是否需要为每个类实现复制构造函数?
任何指针都会非常感激......
编辑1 :我添加了序列化代码。我还发现在Level2Class和Level1Class中,某些类型的对象会产生问题。特别是通用词典。我找到了一个通过制作Level1Class& amp; Level2Class可序列化(使用[Serializable()])然后明确地忽略字典(使用[XmlIgnore])。这有效,但有一个缺点:XML文件现在包含类类型Level2Class(内容为MyBaseClass)。