Постоянство данных в библиотеке классов между методами одного класса - PullRequest
2 голосов
/ 19 июля 2010

Я создаю библиотеку классов для AutoCAD с .NET.

Проблема заключается в том, что методы вызываются один за другим из AutoCAD, и первый читает файл ввода и создает список данных в памяти. Однако, когда новый называется, список пуст.

Мне нужно найти решение, как сохранить эти данные. Список содержит данные в моей созданной структуре. Методы вызываются независимо, но по порядку.

Пример короткого кода:

namespace GeoPjuvis
{
   ...

public class Program
{
    ...

//program variables 
private List<GeoData> dataList;
private List<DataPoint> points;
private int mapScale;

public Program()
{
    dataList = new List<GeoData>();
    points = new List<DataPoint>();
}

//Initialization method of the program. Makes praperations. Reads files. Add points to map.
[CommandMethod("geoinit", CommandFlags.Session)]
public void Init()
{
    ...
}

//method uses data gathered before and selects points  
[CommandMethod("selectPoints", CommandFlags.Session)]
public void SelectPoints()
{

    ...

}...

Так почему эти списки данных и списки точек пусты, когда я вызываю метод SelectPoints (). И как этого избежать?

Ответы [ 4 ]

2 голосов
/ 19 июля 2010

Я не знаю о программировании для AutoCAD, но я подозреваю, что каждый раз он создает новый экземпляр. Вы можете попробовать сделать переменные статичными (например, на уровне класса):

private static List<GeoData> dataList = new List<GeoData>();
0 голосов
/ 19 июля 2010

Предположительно, основываясь на предоставленной вами информации, AutoCAD создает новый экземпляр вашего объекта для каждого вызова метода? Это объясняет, почему переменные вашего экземпляра пусты.

Попробуйте сделать переменные статичными и посмотрите, сохраняются ли данные при вызовах методов.

Есть ли в документации AutoCAD инструкции по написанию этих программ?

0 голосов
/ 19 июля 2010

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

Вот хорошая ссылка для реализации Singleton в c #, http://csharpindepth.com/Articles/General/Singleton.aspx

0 голосов
/ 19 июля 2010

Создает ли он новый класс каждый раз, когда вызывает метод?(Простите, я не знаком с кодированием для AutoCAD.) Попробуйте сделать класс статичным.Если это не сработает, можете ли вы вернуть значения из первого метода в AutoCAD и отправить их в качестве аргументов следующему методу?Имейте в виду, что это не лучшее решение для производительности.

Также, для справки, взгляните на реализацию Singleton в C #:

http://msdn.microsoft.com/en-us/library/ff650316.aspx

...