2012-12-14 2 views
1

개체 배열에 대해 배우기 시작했는데 몇 가지 어려움이 있습니다.개체의 값은 무엇이며 언제 null 일 수 있습니까?

public void Add(Person p) 
     { 
      if (p == null) 
       Console.WriteLine("Error, param can't be null"); 
      if (m_Arr.Length <= m_Counter) 
      { 
       Array.Resize(ref m_Arr, m_Arr.Length + 10); 
      } 
      m_Arr[m_Counter++] = p; 
     } 

내 질문이 때 p는 null 될 수있다 : 내가 클래스 Person의 간단한 코드와 같은 클래스 PersonArray과 PersonArray 클래스의 방법 중 하나가 발견 (m_Arr는 사람의 배열입니다)? 개체가 가질 수있는 값이 무엇인지 의미하므로 null이되지 않습니다. 또한, 또 다른 질문이 있습니다 - m_Counter 변수 (카운터) 초기화되지 않지만 모든 problams없이 작동합니다. 왜 괜찮습니까?

+0

* "내 질문은 p가 null 일 수 있습니다."* ... 단순히 발신자 코드가 '추가 (null);'일뿐입니다. ** reference ** 타입 인'Person'과는 반대로 ** value 타입 ** 인'int' 타입의 m_Counter는 동일하지 않습니다 –

+0

다음은 디폴트에 대해 이야기하는 페이지입니다 변수의 값. 그것은 당신이 초기화되지 않은 변수를 사용할 수 없다고 주장하기 때문에 약간 혼란 스럽지만, 나는 그들이 기본 생성자를 가지고 있지 않다는 것을 의미한다고 가정합니다 ... http://msdn.microsoft.com/en-us/library/83fhsxwc (v = vs80) .aspx – RonaldBarzell

답변

1

페이지를 들면 그것이 null는 아니 당신은 순서 p에 대한 모든 값을 설정할 수 없습니다

var p = new Person();

e..g에게 인스턴스화되어 있어야 null이 아니라, 그것은 전에 인스턴스화되어야한다 당신은 그것에 가치를 설정할 수 있습니다.

m_counter에 대해서는 정수형이라고 추측합니다. 기본값은 0입니다.

1

개체가 인스턴스화되지 않은 경우 NULL이됩니다. 인스턴스화하면 사람의 인스턴스가됩니다. p = new Person(). 또한 NULL로 설정할 수 있습니다. p = null;

1

m_Counter는 기본 값을 갖는 기본 유형입니다. 정수는 모든 변수가 기본값 때 초기화됩니다 방법을

+0

m_Counter를 쓰면 0이됩니다. m_Counter = default (int) – lante

1

추가 호출하기 전에 당신이

Person p = new Person(); 

처럼 초기화해야 null이 될하지 않는 제로

p가 널이 될 수있을 것입니다 m_counter가 int이고 기본값이 0 (§4.1.2)이므로 C# 스펙의 §5.2에서 선언합니다.
컴파일러는 m_counter가 새 인스턴스가 생성되는 즉시 (§5.3.1) 할당 된 것으로 간주하므로 불평하지 않습니다. 예를 들어,

Person p = null; 

m_Counter 클래스의 범위에 변수가 될 것으로 보인다, 그래서이 코드의 다른 부분에서 초기화 될 수있다 : 당신이 쓰는 경우

1

p는 널 (null)이 될 수

class SomeClass 
{ 
    static int m_Counter = 0; 
    static Person[] m_Arr = new Person[] { }; 

    public void Add(Person p) 
    { 
     if (p == null) 
      Console.WriteLine("Error, param can't be null"); 
     if (m_Arr.Length <= m_Counter) 
     { 
      Array.Resize(ref m_Arr, m_Arr.Length + 10); 
     } 
     m_Arr[m_Counter++] = p; 
    } 
} 
관련 문제