从继承链获取基类

时间:2014-03-19 21:57:10

标签: c# inheritance

我有一个继承链,想要获得一个基类实例。代码如下所示:

[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)。

0 个答案:

没有答案