【问题标题】:using static classes for global objects in C#在 C# 中为全局对象使用静态类
【发布时间】:2011-03-23 17:54:47
【问题描述】:

我正在使用粒子列表。

List<Particle> particles;

通常我将此列表放在我的模拟课程中。它计算粒子的位置、速度和其他属性。

其他一些类需要这些粒子数据用于输出和后处理。

创建静态类可以吗,

static class Particles
{
    static List<Particles> plist;
}

从其他类访问粒子数据?

【问题讨论】:

    标签: c# static-members static-classes


    【解决方案1】:

    我建议尽可能远离静态类/方法。它们往往会导致代码的高度耦合。尽管在某些情况下使用它们要快得多(希望是谨慎的)。

    我不太确定您的问题是什么,但我至少建议更改静态类以公开属性而不是字段。

    public static class Particles
    {
        public static List<Particles> PList { get; set; }
    }
    

    public static class Particles
    {
        private static List<Particles> _plist;
    
        public static List<Particles> PList
        {
            get { return _plist; }
            set { _plist = value; }
        }
    }
    

    通过这种方式,您可以将列表封装得更多。例如,您可以在 getter 或 setter 期间检查空值。

    【讨论】:

    • “它们往往会导致代码的高度耦合” 是的,更糟糕​​的是,一旦你开始使用它们,它们就会变成一个滑坡。他们非常方便,直到突然之间他们不是那么他们是一场噩梦。在开发我的 DAL 的早期版本中,我匆忙将我的一些存储库设为静态,一旦我切换到使用 ORM 解耦,这段代码就变得痛苦而漫长。我对自己做了这件事,并且学到了很多东西。
    • @乔什阿门!它们太容易被滥用了,过了一会儿你就会面对上帝的课程。我工作的公司有一个编码标准来避免使用静态方法。我们已经被他们的便利方式所困扰太多次了。
    【解决方案2】:

    您至少有两个选择:

    1. 在每个对粒子进行操作的类中创建一个IList&lt;Particles&gt; 属性。

    2. 在每个对粒子进行操作的类中,创建一个私有 IList&lt;Particles&gt; 字段和一个将此类列表作为参数的构造函数。

    这些选项中的任何一个都将保留列表的封装。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多