2014-03-07 21 views
-1

以下是我使用的類。創建變量一次

刪除

問題是,這裏是我的函數來更新我的工具提示。

我的問題是,如何在每次調用tooltipUpdate函數時編輯類文件,而不是創建'新的Map()',我寧願在program.cs中創建它一次?

+0

我可能會誤解這個問題。如果您在program.cs中創建地圖並將其傳遞給工具提示,它應該可以解決您的問題。還有其他選項,如單例模式,但最好將它傳遞給tooltipupdate方法。 –

+0

我以爲你不應該從'Dictionary <>'繼承,而是從'KeyedCollection <>'繼承。 – ja72

回答

1

在你的班級內創建你的實例。將該定義放在第tooptipUpdate方法之外。

Map map = new Map(); 
public void tooltipUpdate(int m) 
{ 
    toolTip1.SetToolTip(pictureBox1, map[m]); 
} 
+0

我喜歡這個回答。 – Andrew

+0

@Andrew如果你喜歡它,你必須勾選它。 –

1

保持變量超出函數的範圍。

Map map = new Map(); 
public void tooltipUpdate(int m) 
{ 
    toolTip1.SetToolTip(pictureBox1, map[m]); 
} 

注意,你不能使用var關鍵字的方法的範圍之內,所以你需要顯式聲明的類型。從var docs

在Visual C#3.0開始,這是在方法 範圍內聲明的變量可以有一個隱式類型變種。與隱式類型化的本地 變量類似,如果您自己聲明瞭 類型,但編譯器確定類型。

此外,Implicitly Typed Local Variables (C# Programming Guide)文件對如何var關鍵字作品良好的信息,當它是合法使用var

+0

我們可以傳遞隱式類型變量作爲函數參數嗎?因爲OP做了'toolTip1.SetToolTip(pictureBox1,map [m]);'?這裏'map'是使用'var'創建的。 –

+0

@SudhakarTillapudi是的,變量仍然是強類型的,因此任何使用該變量的方法調用都將進行類型檢查,並且如果它們與方法簽名不匹配,將會編譯失敗。 –

0

如果你不認爲map應該在類級別更改,使其readonly並在構造函數實例化它。

private readonly Map map; 

public MyClass() 
{ 
    map = new Map(); 
} 

然後,

public void tooltipUpdate(int m) 
{ 
    toolTip1.SetToolTip(pictureBox1, map[m]); 
} 
0

這些答案都是很好的答案,但我會建議通過地圖對象的方法。所以我提出這個:

Map map = new Map(); 

到Program.cs中,或任何你調用TooltipUpdate方法,改變tooltipupdate這樣:

public void tooltipUpdate(int m, Map map) 
    { 

     toolTip1.SetToolTip(pictureBox1, map[m]); 
    } 

這幾乎比在聲明映射一定要好類級別,正確​​地將控制轉換爲調用方法。例如,您可以以這種方式同時擁有2個地圖對象。