C # библиотека в DLL и проблема статических переменных - PullRequest
0 голосов
/ 02 июля 2011

Я хочу создать библиотеку в .dll, чтобы ее можно было использовать повторно. Пользователь, который использует библиотеку, должен иметь возможность определить количество отслеживаемых цветов, и я поместил эти данные в переменное значение 'num', которое должно быть статическим, если я хочу использовать его так, как я хочу.

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

Теперь не проблема, если пользователь использует код напрямую, но если я поместил его в .dll, пользователь не сможет изменить значение num. Каково было бы решение этой проблемы? Спасибо.

Ответы [ 4 ]

1 голос
/ 02 июля 2011

Используйте свойство вместо.В установщике свойств перераспределяем массивы:

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
           //...
       }
    }
1 голос
/ 02 июля 2011

Я бы реорганизовал ваш дизайн и сделал бы этот необязательный параметр конструктора для вашего класса, затем инициализировал ваши переменные экземпляра в конструкторе:

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

    public Foo(int colorsToTrack = 2)
    {
       trackingColorRanges = new TrackColorRange[colorsToTrack]; 
       ... 
       showPointLocations = new PictureBox[colorsToTrack];  
    }
}
0 голосов
/ 02 июля 2011

.Net dll также могут иметь файлы конфигурации, перенести этот номер в конфигурацию и прочитать, используя ConfigurationManager .Подробнее об этом можно узнать здесь .

0 голосов
/ 02 июля 2011

Для меня это выглядит как плохой дизайн (рассмотрите возможность добавления статического метода для изменения значения, а не для его непосредственного изменения).

Добавление public перед любым классом и любым членом (полем, свойством или методом), который вы хотитедоступ вне сборки.(По умолчанию для классов / интерфейсов внутреннее, для членов по умолчанию личное.)

...