Статические индексаторы не поддерживаются в C#?[дубликат]
Вопрос
На этот вопрос уже есть ответ здесь:
- Статические индексаторы? 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