我想在.dll中创建一个库,以便可以重用它。 使用该库的用户应该能够说出要跟踪的颜色数量,并且我将这些数据放在变量'num'中,如果我想以我想要的方式使用它,则必须是静态的。
static int num = 2;
TrackColorRange[] trackingColorRanges = new TrackColorRange[num]; ...
PictureBox[] ShowPointLocations = new PictureBox[num];
如果用户直接使用代码,现在不是问题,但是如果我把它放在.dll中,则用户无法更改num的值。这个问题的解决方案是什么?谢谢。
答案 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。