2015-04-06 30 views
1

我想創建一個全局可訪問的結構/類(在C#中)從回調處理程序訪問我的股票價格。c# - 帶索引訪問器的公共類

我只知道C和很容易出現

例用C

struct _Sample 
{ 
    int SomeValue; 
}; 
struct _Sample Sample[10]; 

這是我到目前爲止在C#2個小時的努力後。

public static class GlobalVar 
{ 
    private static double _StockPrice; 

    public static double SetStockPrice 
    { 
     set 
     { 
       _StockPrice = value; 
     } 
    } 

    public static double GetStockPrice 
    { 
     get 
     { 
       return _StockPrice; 
     } 
    } 
} 

上面的例子可以作爲GlobalVar.SetStockPrice = 10.254;我知道我必須使用<List>,使可作爲陣列_StockPrice,但我所有的嘗試編譯工作方案失敗。

我想訪問它GlobalVar[1].SetStockPrice = 1.0;GlobalVar[1].SetStockPrice = 1.0;

我必須使用C#,因爲我使用的SDK只在C#提供。

+0

使用數組,而不是一類。 –

+1

我想你想使用SetStockPrice作爲集合而不是單個對象。 –

+1

你不能在C#中做到5.0。甚至6。0只允許「全局」方法調用,而不是屬性 - 所以你不能讓全局索引器調用(你可以通過引用你的類的本地對象來獲得你想要的語法)... –

回答

0

您給出的C示例是創建一個包含10個結構實例的數組。

等價的C#代碼是這樣的:

struct _Sample 
{ 
    public int SomeValue; 

    public static _Sample[] Sample = new _Sample[10]; 
}; 

不是很C#-ish但是。使用C#的風格我會寫類似

​​
0

你可以做這樣的事情,有一個像在相同的行爲。注意,你不需要使用SetFieldGetField使用{ get; set; }默認情況下(這是一個屬性)你會得到這種行爲。

public struct Sample 
{ 
    public double StockPrice { get; set; } 
} 

public static class GlobalVar 
{ 
    public static Sample[] Samples = new Sample[10]; 
} 

並以ACCES使用

GlobalVar.Samples[1].StockPrice = 1.0; 
1

你將不得不增加一個StockPrice類,並保持內部字典GlobalVar內,使這項工作,但你可以這樣做:

public StockPrice this[int index] 
{ 
    get 
    { 
     StockPrice stockPrice = null; 

     if (index > -1) 
     { 
      InternalDictionary.TryGetValue(index, out stockPrice); 
     } 
     return stockPrice; 
    } 
} 

然後,您可以使用GlobalVar[index]GlobalVar的內部字典中獲取某個StockPrice對象。

另請注意,這不適用於靜態類,因爲C#中不允許使用靜態索引器。您可能想要將您的類更改爲單例而不是靜態。

編輯:一個更完整的示例(還需要工作雖然)與單執行:

public class GlobalVars 
{ 
    static StockPrices _stockPrices = new StockPrices(); 
    public static StockPrices StockPrices 
    { 
     get 
     { 
      return _stockPrices ; 
     } 
    } 
} 

public class StockPrices 
{ 
    Dictionary<int, StockPrice> InternalDictionary = new Dictionary<int, StockPrice>(); 

    public StockPrice this[int index] 
    { 
     get 
     { 
      StockPrice stockPrice = null; 

      if (index > -1) 
      { 
       InternalDictionary.TryGetValue(index, out stockPrice); 
      } 
      return stockPrice; 
     } 
    } 

    public void Add(StockPrice stockPrice) 
    { 
     int index = InternalDictionary.Keys.Max() + 1; 
     InternalDictionary.Add(index, stockPrice); 
    } 
} 

然後,你可以打電話給你這樣的代碼:

GlobalVars.StockPrices[1].DoSomething