2010-07-19 17 views
2

我使用.NET爲AutoCAD創建類庫。一個類方法之間的類庫中的數據持久性

問題是,方法從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() 
{ 

    ... 

}... 

那麼,爲什麼這些DataList和點列表是空的,當我打電話SelectPoints()方法。以及如何避免這種情況?

回答

2

我不知道編程爲AutoCAD,但我懷疑它的每次創建一個新的實例。您可以嘗試使變量保持靜態(例如,類級別):

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

看起來它每次都會創建新實例。讓他們靜止幫助我。謝謝大家的回答。 – Mindaugas 2010-07-19 13:03:07

0

它每次調用方法時都實例化一個新類嗎? (請原諒我,我對AutoCAD的編碼不熟悉。)請嘗試將該類設爲靜態。如果這不起作用,您能否將第一種方法的值返回給AutoCAD,並將它們作爲參數發送給下一個方法?請記住,這不是性能的最佳解決方案。

此外,僅供參考,看看在C#中的一個Singleton的實現:

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

0

在猜測,根據您提供的信息,並AutoCAD中創建的新實例您每個方法調用的對象?這可以解釋爲什麼你的實例變量是空的。

嘗試使變量靜態的,看看在方法調用的數據仍然存在。

是否AutoCAD的文檔有寫這些程序的任何指示?

0

看起來你在呼喚你的類的新實例,你可以實現一個Singleton模式,以確保你總是調用同一個實例或堅持點,並加載它們第二次輪。

這裏有一個很好的鏈接,在C#中辛格爾頓實施,http://csharpindepth.com/Articles/General/Singleton.aspx