这个问题已经在这里有一个答案:
- 静态索引器? 7个回答
我一直想这几种不同的方式,但我达到了,它不能做的结论。 这是一个语言特点我已经从过去其他语言的享受。 难道仅仅是我应该只写了吗?
这个问题已经在这里有一个答案:
我一直想这几种不同的方式,但我达到了,它不能做的结论。 这是一个语言特点我已经从过去其他语言的享受。 难道仅仅是我应该只写了吗?
不,静态索引没有在C#的支持。 不像其他的答案,但是,我怎么看也很容易被点有他们。 考虑:
Encoding x = Encoding[28591]; // Equivalent to Encoding.GetEncoding(28591)
Encoding y = Encoding["Foo"]; // Equivalent to Encoding.GetEncoding("Foo")
这将是相对很少使用,我怀疑,但我认为这是奇怪的是,它的禁止 - 它给了什么特别的理由不对称据我可以看到。
您可以使用静态索引属性模拟静态索引:
public class MyEncoding
{
public sealed class EncodingIndexer
{
public Encoding this[string name]
{
get { return Encoding.GetEncoding(name); }
}
public Encoding this[int codepage]
{
get { return Encoding.GetEncoding(codepage); }
}
}
private static EncodingIndexer StaticIndexer;
public static EncodingIndexer Items
{
get { return StaticIndexer ?? (StaticIndexer = new EncodingIndexer()); }
}
}
用法:
Encoding x = MyEncoding.Items[28591]; // Equivalent to Encoding.GetEncoding(28591)
Encoding y = MyEncoding.Items["Foo"]; // Equivalent to Encoding.GetEncoding("Foo")
没有,但也可以创建包含使用一个索引类的实例的静态字段...
namespace MyExample {
public class Memory {
public static readonly MemoryRegister Register = new MemoryRegister();
public class MemoryRegister {
private int[] _values = new int[100];
public int this[int index] {
get { return _values[index]; }
set { _values[index] = value; }
}
}
}
}
......这能在你正打算的方式进行访问。 这可以在立即窗口来测试...
Memory.Register[0] = 12 * 12;
?Memory.Register[0]
144