2016-11-23 1 views
1

인덱서를 사용하면 클래스 또는 구조체의 인스턴스를 배열처럼 인덱싱 할 수 있습니다. 인덱서는 접근 자들이 매개 변수를 사용한다는 점을 제외하고는 속성과 닮았습니다.왜 내 인덱서가 작동하지 않습니까?

나는 내가 다음과 같은 멤버의 S1에서 학생의 인스턴스를 받아야은 MSDN 문서, 내가 int로 인덱서를 학생의 객체를 반환하고 있기 때문에 (S2)에 따르면이

class StudentMemento 
    { 
     Student student; 
     public Student this[int index] 
     { 
      get { return student; } 
      set { student = new Student { time = DateTime.Now }; } 
     } 
    } 
    class Client 
    { 
     static void Main() 
     { 
      StudentMemento s = new StudentMemento(); 
      Student s1 = s[1]; 
      Student s2 = s[2]; 
      Student s3 = s[1]; 
      Console.Read(); 
     } 
    } 

같은 코드가 있습니다 하지만 null 참조가 나타납니다. 아무도 나를 이해하는 데 도움이 될 수 있습니까?

StudentMemento s = new StudentMemento(); 

s.student 후 감사

+0

'학생'필드는 '메인'에서하지 않는 세터를 부를 때까지 할당되지 않습니다. – Lee

+0

당신은 학생 목록 또는 배열이 필요합니다 – McNets

+0

@mcNets Indexer –

답변

3

null 될 것입니다. student 필드는 인덱서 설정자 내에서만 지정되므로 getter를 호출하기 전에 해당 필드를 호출해야합니다.

StudentMemento s = new StudentMemento(); 
s[1] = null; 

Student s1 = s[1]; 
Student s2 = s[2]; 
Student s3 = s[1]; 
+0

의 작동을 이해하려고 노력하고 있지만 s [1] = null로 설정하면 s1이 Student() 객체를 가져옵니다. 하지만 변수 s2가 setter를 호출하지 않았을 때 값을 얻는 방법은 무엇입니까? [2] –

+0

@LijinJohn - 백킹 필드가 하나 뿐이므로 인덱서는'index' 매개 변수를 전혀 사용하지 않습니다. – Lee

+0

시간 내 주셔서 대단히 감사합니다. –

관련 문제