c# - 具有索引访问器的公共类

时间:2015-04-06 17:43:13

标签: c# class indexing

我想创建一个全局可访问的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#中可用。

3 个答案:

答案 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)

您可以执行类似此操作,以获得与中相同的行为。请注意,您不需要SetFieldGetField使用{ 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;