0

我正在尝试简化几个类的加载和保存方法,这些类基本上是带有一些新字段的基类。所有派生类都使用所有基类的字段,因此它们的加载/保存方法包括基类的加载/保存代码,并添加了一些用于处理派生类剩余未处理字段的行。

我的第一个想法是我可以只加载一个实例作为基类,向下转换为派生类并继续加载其余字段,但显然你不能只向下转换为 C# 中的派生类。经过一番思考,我想也许我可以遍历基类的所有字段成员并将这些字段值复制到派生类的新实例,但我不确定这是最好(或最快)的方法.

基本上我想做的是加载一个基类的实例,将其转换为派生类,然后完成加载剩余字段。

是否有某种方法可以在派生类的 Load 和 Save 方法中保存相同的代码行,其中包括来自基类的所有 Load 和 Save 代码而无需向下转换?

这是一些示例代码(真实的只是长了几倍):

class Base 
{
    int i;
    static Base Load(Dictionary<string, object> dic)
    {
        Base b = new Base();
        b.i = (int)dic["i"];
        return b;
    }
}
class Derived : Base
{
    float f;
    static Derived Load(Dictionary<string, object> dic)
    {
        Derived d = new Derived();
        d.i = (int)dic["i"];
        d.f = (float)dic["f"];
        return d;
    }
}
4

2 回答 2

1

我认为您正在寻找常规的序列化代码:

 class Base 
 {  
     public int Field1 {get;set;}
     virtual void Load(BinaryReader reader)
     {
         Field1 = reader.ReadInt();
     }
 }
 class Derived:Base
 {  
     public int Field2 {get;set;}
     override void Load(BinaryReader reader)
     {
         base.Load(reader);
         Field2 = reader.ReadInt();
     }
 }

用法类似于:

 Base toRead = new Derived();
 toRead.Load(reader);
于 2013-09-27T04:16:45.763 回答
0

你不能。猫和狗总是动物,但动物可以是猫或狗。没有办法把猫变成狗。

于 2013-09-27T04:16:35.930 回答