2010-07-31 58 views
0

我正在使用粒子列表。在静态类中使用C#中的全局对象

List<Particle> particles; 

通常我把这个列表放在我的模拟类中。它计算粒子的位置,速度和其他属性。

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

是确定以创建一个静态类,

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

从其他类访问粒子数据?

回答

2

我会建议尽可能远离静态类/方法。它们倾向于导致代码的高度耦合。虽然有些情况下使用它们的速度要快得多(希望保守)。

我不太清楚你的问题,但我至少会建议改变静态类来暴露属性而不是字段。

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中检查空值。

+2

“他们往往会导致代码高耦合” 是的,更糟糕​​的是,一旦你开始使用它们,它们就会变成滑坡。他们非常方便,直到突然他们不是那么他们是一场噩梦。在开发我的DAL的早期版本中,我匆匆地使一些静态的库成为静态库,一旦我切换到使用ORM解耦,这段代码很痛苦且很长。我对自己做了这件事,并且学会了艰难的道路。 – joshlrogers 2010-08-01 00:02:47

+0

@Josh阿门!他们太容易被滥用,过了一会儿,你正面临上帝阶级。我工作的公司有一个编码标准来避免静态方法。我们被他们的方便方式咬了太多次。 – 2010-08-01 00:45:05

0

你在这里至少有两个选项:

  1. 创建每个颗粒上运行的类属性IList<Particles>

  2. 在每个对粒子进行操作的类中,创建一个专用的IList<Particles>字段和一个将此列表作为参数的构造函数。

其中任何一个选项都会保留列表的封装。