c# - 创建另一个类的后代
问题描述
我想根据以下内容创建一个新类:
[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);
解决方案
按照建议,我从 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
{
}
如果这行得通,好吧。:( 但是,这只是额外的不必要的代码,这让我很难过。
推荐阅读
- linux - 如何让 apache 让我们编写 url 子域但使用 url 就像不是子域
- java - 播放 4 秒视频后,Seekbar 消失。触摸屏幕时不显示。它仅显示开始 4 秒和仅完成时间
- javascript - 无法使用 Axios 下载 PDF 文件
- xml - Sumo 随机 Trips Xml 文件未生成,
- c# - 在插入 EF Core 之前检查重复项
- html - 在不使用 DataTable 插件的情况下过滤 HTML 表
- php - 只访问指定 IP 地址的网页
- spring - 功能区负载均衡器客户端未在 Spring Boot 2.4.3 和 Cloud 2020.0.1 中禁用。改为使用 Consul 进行负载平衡
- javascript - 如何延迟 React.js 中的返回以从 JSON 加载数据
- html - 如何仅使用 css 更改配色方案?