2008-09-30 2 views

답변

59

아니요, 정적 인덱서는 C#에서 지원되지 않습니다. 그러나 다른 답변 들과는 달리, 나는 그 (것)들을 갖는 데있어서 얼마나 중요한지 쉽게 알 수 있습니다. 고려 :

Encoding x = Encoding[28591]; // Equivalent to Encoding.GetEncoding(28591) 
Encoding y = Encoding["Foo"]; // Equivalent to Encoding.GetEncoding("Foo") 

그것은 상대적으로 거의 사용되지 않을 것입니다, 나는 생각한다,하지만 난 그것을 금지 있다는 이상한 생각 - 그것은 지금까지 내가 볼 수있는 특별한 이유 비대칭 성을 제공합니다.

+2

정확히 일치합니다. 그들에게는 그들의 자리가 있습니다. 디자인 문제에 관해 이야기하는 다른 이들은 명확하게 허용 된 고전어로 작업 한 적이 없었습니다. 왜냐하면 매우 도움이되기 때문입니다. – user9991

+1

예. 정확히 요. 그들은 건축에서 매우 유용한 장소를 가지고 있습니다. 어떤 사람들은 그들의 눈가리개를 가지고 있습니다. – Kilhoffer

+4

쓰레기. 이제 Cache [key] 대신에 정적 메서드 Cache.Get (key)를 작성해야합니다 ... – Gishu

16

당신은 정적 색인 속성을 사용하여 정적 인덱서를 시뮬레이션 할 수 있습니다 :

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") 
+3

Jon의 답변 (평소와 같이)이 가장 정확하지만 일부 상황에서는 그다지 좋지 않습니다. – Thiru

0

아니,하지만 사용하는 클래스의 인스턴스를 보유하고 정적 필드를 만들 수 있습니다 인덱서 ...

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 
관련 문제