我想创建一个全局可访问的struct / class(在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)
您必须添加一个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
答案 1 :(得分:0)
您提供的C示例是创建一个包含10个结构实例的数组。
等效的C#代码是这样的:
struct _Sample
{
public int SomeValue;
public static _Sample[] Sample = new _Sample[10];
};
然而,这不是非常C#。使用C#样式我会写类似
的东西struct Sample
{
public int SomeValue { get; set; }
public static Sample[] Values = new Sample[10];
}
答案 2 :(得分:0)
您可以执行类似此操作,以获得与c中相同的行为。请注意,您不需要SetField
和GetField
使用{ get; set; }
默认情况下会获得此行为(它是一个属性)。
public struct Sample
{
public double StockPrice { get; set; }
}
public static class GlobalVar
{
public static Sample[] Samples = new Sample[10];
}
并使用
GlobalVar.Samples[1].StockPrice = 1.0;