首页 > 解决方案 > 创建另一个类的后代

问题描述

我想根据以下内容创建一个新类:

    [Serializable()]
    public class Class_A : ISerializable
    {
        public int DISP_SEGS { get; set; }

        //Default constructor
        public Class_A()
        {
            //
        }

        //Deserialization constructor
    //If I add virtual to this I get an error
        public Class_A(SerializationInfo info, StreamingContext ctxt)
        {
            foreach (PropertyInfo PI in this.GetType().GetProperties()) PI.SetValue(this, info.GetValue(PI.Name, PI.PropertyType));
        }

        //Serialization function
        public void GetObjectData(SerializationInfo info, StreamingContext ctxt)
        {
            foreach (PropertyInfo PI in this.GetType().GetProperties()) info.AddValue(PI.Name, PI.GetValue(this));
        }
    }

我希望“Class_B”使用序列化和反序列化函数的功能。不想创建一个全新的类并复制所有代码,这些代码将在基础中。我希望能够只创建一个 Class_B 对象,然后调用:

    Class_B cb = new Class_B();

...

    bformatter.Serialize(stream, cb);

...

    cb = (Class_B)bformatter.Deserialize(stream);

标签: c#classinheritanceserialization

解决方案


按照建议,我从 Binaryformatter 切换到 Protobuf。之后,一些问题,我已经开始工作了。所以,我以一种新的格式回到我原来的问题。

我有一个基类,想创建几个不同的类。我看到了,您应该使用 Protobufs ProtoInclude 属性。但是,它似乎落后了。它说,我的基类必须知道派生类型。

    [ProtoContract]
    [ProtoInclude(7, typeof(SomeDerivedType))]
    class SomeBaseType {...}

    [ProtoContract]
    class SomeDerivedType {...}

这是我派生的一个独立类。所以,它必须是通用的。

    [ProtoContract]
    public class grid
    {
    }

所以,我需要从中得出。

    [ProtoContract]
    public class Class_A : grid
    {
    }  

    [ProtoContract]
    public class Class_B : grid
    {
    }

我明白,将 ProtoInclude 放在 Class_A 和 Class_B 上没有任何作用。不,如果它需要在网格类上。最好的方法是什么?因为,我正在打字,我想知道是否需要创建一个了解 Class_A 和 Class_B 的存根类?

    [ProtoContract]
    [ProtoInclude(7, typeof(Class_A))]
    [ProtoInclude(8, typeof(Class_B))]
    public class ProtoStub : grid
    {
    }

    [ProtoContract]
    public class Class_A : ProtoStub
    {
    }

    [ProtoContract]
    public class Class_B : ProtoStub
    {
    }

如果这行得通,好吧。:( 但是,这只是额外的不必要的代码,这让我很难过。


推荐阅读