这是让C#类共享对象的有效方法吗?

问题描述 投票:0回答:1

我有一组要被序列化为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);

        }
    }
}
c# sharing
1个回答
1
投票

Python禅说,那个>

显式优于隐式

即使不是Python,此规则在这里也适用。当您传递相同的SharedProperties参数时,在任何一个类中更改spx都不会影响其他类,这一点并不明显。这是调试的噩梦,很难阅读和支持。如果需要共享属性,请创建单独的类/服务,将其注入实例并使用它修改参数

© www.soinside.com 2019 - 2024. All rights reserved.