dll中的C#库和静态变量问题

时间:2011-07-02 19:29:59

标签: c# variables dll static

我想在.dll中创建一个库,以便可以重用它。 使用该库的用户应该能够说出要跟踪的颜色数量,并且我将这些数据放在变量'num'中,如果我想以我想要的方式使用它,则必须是静态的。

    static int num = 2;     
    TrackColorRange[] trackingColorRanges = new TrackColorRange[num]; ... 
    PictureBox[] ShowPointLocations = new PictureBox[num];   

如果用户直接使用代码,现在不是问题,但是如果我把它放在.dll中,则用户无法更改num的值。这个问题的解决方案是什么?谢谢。

4 个答案:

答案 0 :(得分:1)

我会重构你的设计并使它成为你的类的可选构造函数参数,然后在构造函数中初始化你的实例变量:

class Foo
{
    TrackColorRange[] trackingColorRanges;
    PictureBox[] showPointLocations;

    public Foo(int colorsToTrack = 2)
    {
       trackingColorRanges = new TrackColorRange[colorsToTrack]; 
       ... 
       showPointLocations = new PictureBox[colorsToTrack];  
    }
}

答案 1 :(得分:1)

请改用属性。在属性setter中重新分配数组:

public class ColorTracker {
    private int count;
    private TrackColorRange[] trackingColorRanges;
    private PictureBox[] ShowPointLocations;

    public ColorTracker(int count) {
        Count = count;
    }
    public int Count {
       get { return count; }
       set {
           if (value <= 0) throw ArgumentOutOfRangeException();
           count = value;
           TrackColorRange = new TrackColorRange[value];
           ShowPointLocations = new PictureBox[value];
           // TODO: initialize array elements
           //...
       }
    }

答案 2 :(得分:0)

对我来说看起来很糟糕(考虑添加静态方法来更改值而不是直接更改它)。

在任何类和任何要在程序集外部访问的成员(字段,属性或方法)之前添加public。 (类/接口的默认值是内部的,成员的默认值是私有的。)

答案 3 :(得分:0)

.Net dll也可以有配置文件,将此号码移动到配置并使用ConfigurationManager读取。有关详细信息,请访问here