类库中的数据持久性在一个类方法之间

时间:2010-07-19 12:45:58

标签: c# .net autocad

我正在使用.NET创建AutoCAD的类库。

问题是这些方法是从AutoCAD一个接一个地调用的,第一个读取输入文件并在内存中创建数据列表。但是,当调用新的列表时,列表为空。

我需要找到一个如何保存这些数据的解决方案。 List包含我创建的结构中的数据。方法是独立调用的,但按顺序调用。

简短代码示例:

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()方法时,为什么这些dataList和points列表是空的。以及如何避免这种情况?

4 个答案:

答案 0 :(得分:2)

我不知道AutoCAD的编程,但我怀疑它每次都在创建一个新实例。您可以尝试将变量设为静态(例如,类级别):

private static List<GeoData> dataList = new List<GeoData>();

答案 1 :(得分:0)

每次调用方法时是否实例化一个新类? (原谅我,我不熟悉AutoCAD的编码。)尝试使类静态。如果这不起作用,您可以将第一种方法的值返回给AutoCAD,并将它们作为参数发送到下一个方法吗?请记住,这不是性能的最佳解决方案。

另外,作为参考,请看一下C#中的Singleton实现:

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

答案 2 :(得分:0)

根据您提供的信息,AutoCAD会为每个方法调用创建一个新对象实例吗?这可以解释为什么你的实例变量是空的。

尝试将变量设为静态,并查看数据是否在方法调用中持续存在。

AutoCAD文档是否有编写这些程序的任何说明?

答案 3 :(得分:0)

看起来你正在调用你的类的一个新实例,你可以实现一个单例模式,以确保你总是调用相同的实例,或者保留点并加载它们。

这是c#,http://csharpindepth.com/Articles/General/Singleton.aspx

中Singleton实现的一个很好的链接