【发布时间】:2020-03-30 21:56:59
【问题描述】:
我有一组要序列化为 xml 文件的类。这些类共享一些数据。我一直在研究一些类似的问题,但似乎没有一个问题是我想要的。基本上,对我来说最好的方法是创建一个基类,其中包含一个保存数据的对象。然后我可以通过这个对象将封装在一个对象中的数据传递给派生类。这样我就不必在类中定义字段来共享对该共享对象的引用。我已经编写了这种方法的简化示例,它似乎按我预期的方式工作。
我的问题是实现这一目标的最佳方式吗?有没有更好的办法?
谢谢!
示例:
using System;
using System.Collections.Generic;
using System.IO;
namespace test
{
public class SharedProperties
{
public int x = 0;
}
public class BaseA
{
private SharedProperties s;
protected BaseA(SharedProperties sparm)
{
s = sparm;
}
public int spx { get => s.x ; set => s.x = value; }
}
public class Derived1 : BaseA
{
public Derived1() : base(null) { }
public Derived1(SharedProperties x) : base(x) { }
}
public class Derived2 : BaseA
{
public Derived2() : base(null) { }
public Derived2(SharedProperties x) : base(x) { }
}
internal class Program
{
private static void Main(string[] args)
{
SharedProperties sp = new SharedProperties();
Derived1 d1 = new Derived1(sp);
Derived2 d2 = new Derived2(sp);
d1.spx = 1;
Console.WriteLine("d2.spx = {0}", d2.spx);
d2.spx = 2;
Console.WriteLine("d1.spx = {0}", d1.spx);
}
}
}
【问题讨论】:
-
new Derived1().spx = 0;boom,空指针/引用异常...猜猜哪个构造函数会使用 XML 反序列化器... -
通常,如果基类需要与派生类共享变量,它会将这些变量声明为
protected。完毕。你在做什么需要你想出的这种不同的机制? -
我可以看到这可能很有用,但是您在问题中的示例似乎毫无意义。你能解释一下你打算如何实际使用它吗?
-
我想做的是:
-
我正在编写一个程序,将数据映射到要写入文件的 XML 布局。一些数据多次存储在 XML 的不同节点中。所以我有可以序列化为 XML 的对象,而不是将数据保存在每个对象中,我想保存一次数据并将其用于同一成员的不同对象中。数据只存储一次,但在我获取数据时并非所有对象都存在。在某些情况下,存在包含相同数据的对象/节点数组。我无法控制 XML 架构