2012-12-14 236 views
1

我開始瞭解對象的數組,並且遇到一些困難。 我發現類Person的一個簡單的代碼和類PersonArray和在PersonArray類的方法之一是這樣的(m_Arr是一個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; 
     } 

我的問題爲p時可以null?我的意思是什麼值可以反對,所以它不會是空的?另外,我還有一個問題 - m_Counter變量(這是一個計數器)沒有初始化,但它沒有任何問題。爲什麼它可以?

+0

*「我的問題是什麼時候可以爲null?」* ...只要調用者代碼是「Add(null);'。這與m_Counter是不一樣的,它的類型爲'int',它是一個**值類型**,與'Person'是相反的,它是一個**引用**類型 –

+0

這是一個頁面,講述有關default變量的值。這有點令人困惑,因爲他們聲稱你不能使用未初始化的變量,但我認爲這意味着只有當他們沒有默認的構造函數時... http://msdn.microsoft.com/en-us/library/83fhsxwc( v = vs80).aspx – RonaldBarzell

回答

1

對於p不爲空它必須被實例化e..g

var p = new Person();

你不能爲了設置任何值p它不被null,它之前被實例化你可以設置它的值。

至於m_counter,我猜這是一個整數數據類型,所以它默認爲0。

1

如果一個對象沒有被實例化,那麼它將是NULL。當實例化時,它將是一個人的實例,所以p = new Person()。您也可以將其設置回NULL,如p = null;

1

m_Counter是一個本機類型,它將具有默認值。 對於整數這將是零

p可以是空 不爲空,你應該像

Person p = new Person(); 

初始化它調用添加方法

+0

如果你寫m_Counter = m_Counter = default(int) – lante

1

每個變量,使用默認值時初始化之前你聲明它(在C#規範中是§5.2),因爲m_counter是一個int類型,它的默認值是0(§4.1.2)。
編譯器不會抱怨,因爲只要創建新實例(第5.3.1節),m_counter就被認爲是明確分配的。

Person p = null; 

的m_Counter似乎是在類範圍的變量,因此它可以在代碼中的另一部分被初始化,例如:如果你寫

1

p可能是空

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; 
    } 
} 
相關問題