【问题标题】:C# library in dll and static variable problemC#库中的dll和静态变量问题
【发布时间】:2011-07-02 19:29:58
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# variables dll static


    【解决方案1】:

    改为使用属性。在属性设置器中重新分配数组:

    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】:

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

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

      【讨论】:

        【解决方案3】:

        在我看来设计很糟糕(考虑添加一个静态方法来更改值而不是直接更改它)。

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

        【讨论】:

          【解决方案4】:

          .Net dll 也可以有配置文件,将此编号移动到配置中并使用ConfigurationManager 读取。更多信息可以在here找到。

          【讨论】:

          • 他们没有,只有 EXE 可以有 app.exe.config 文件。他们在这里也没有帮助。
          • 您可以拥有 dll.Config 文件并使用 ConfigurationManager.OpenExeConfiguration 加载
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多