1

我开始了解对象的数组,但遇到了一些困难。我找到了一个类Person和类的简单代码, PersonArrayPersonArray 类中的一个方法是这样的(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 变量(它是一个计数器)未初始化,但它的工作没有任何问题。为什么没问题?

4

5 回答 5

1

每个变量在声明时都会使用默认值进行初始化(C# 规范中的第 5.2 节),因为 m_counter 是一个 int,所以其默认值为 0(第 4.1.2 节)。
编译器不会抱怨,因为 m_counter 被认为是在创建新实例后立即分配的(第 5.3.1 节)。

于 2012-12-14T14:03:43.730 回答
1

如果你写, p 可能为空:

Person p = null;

m_Counter 似乎是类范围内的一个变量,因此可以在代码的另一部分对其进行初始化,例如:

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;
    }  
}
于 2012-12-14T14:05:17.320 回答
1

如果一个对象没有被实例化,那么它将是 NULL。当实例化时,它将是一个人的实例 so p = new Person()。您也可以将其设置回 NULL 像p = null;

于 2012-12-14T14:01:58.640 回答
1

m_Counter 是一个本机类型,将具有它的默认值。对于整数,它将为零

p 可以为 null 到不为 null 你应该像这样初始化它

Person p = new Person();

在调用 Add 方法之前

于 2012-12-14T14:02:14.673 回答
1

要使 p 不为 null,它必须已实例化,例如

var p = new Person();

您不能为它设置任何值以p使其不是,必须null先对其进行实例化,然后才能对其设置值。

至于m_counter,我猜是整数数据类型,所以默认为 0。

于 2012-12-14T14:00:41.720 回答