我有一组要被序列化为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);
}
}
}
Python禅说,那个>
显式优于隐式
即使不是Python,此规则在这里也适用。当您传递相同的
SharedProperties
参数时,在任何一个类中更改spx
都不会影响其他类,这一点并不明显。这是调试的噩梦,很难阅读和支持。如果需要共享属性,请创建单独的类/服务,将其注入实例并使用它修改参数