簡體   English   中英

dll 和 static 變量問題中的 C# 庫

[英]C# library in dll and static variable problem

我想在.dll 中創建一個庫,以便可以重復使用。 使用該庫的用戶應該能夠說出要跟蹤的 colors 的數量是多少,如果我想以我想要的方式使用它,我已經把這些數據放在變量“num”中,它必須是 static。

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

現在如果用戶直接使用代碼沒有問題,但是如果我把它放在a.dll 用戶不能改變num的值。 這個問題的解決方案是什么? 謝謝你。

我將重構您的設計並將其作為 class 的可選構造函數參數,然后在構造函數中初始化您的實例變量:

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

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

改為使用屬性。 在屬性設置器中重新分配 arrays:

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
           //...
       }
    }

在我看來設計很糟糕(考慮添加一個 static 方法來更改值而不是直接更改它)。

在任何 class 和要在程序集外部訪問的任何成員(字段、屬性或方法)之前添加 public。 (類/接口的默認值是內部的,成員的默認值是私有的。)

.Net dll 也可以有配置文件,將此編號移動到配置並使用ConfigurationManager讀取。 更多信息可以在這里找到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM