对象的值是什么,什么时候可以为null?

时间:2012-12-14 13:58:57

标签: c# arrays object instance

我开始了解对象的数组,我遇到了一些困难。 我找到了类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;
        }

我的问题是什么时候才能成为null?我的意思是什么值可以反对,所以它不会为空?另外,我有另一个问题 - m_Counter变量(它是一个计数器)没有被初始化,但它没有任何问题。为什么没事?

5 个答案:

答案 0 :(得分:1)

如果p不为null,则必须已实例化e..g

var p = new Person();

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

对于m_counter,我猜这是一个整数数据类型,因此默认为0。

答案 1 :(得分:1)

如果某个对象尚未实例化,那么它将为NULL。实例化时,它将是一个人的实例p = new Person()。您也可以将其设置为NULL,如p = null;

答案 2 :(得分:1)

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

p可以为null 为了不为null你应该像

一样初始化它
Person p = new Person();

在调用Add方法之前

答案 3 :(得分:1)

每个变量在声明时都会使用默认值进行初始化(C#规范中的§5.2。),因为m_counter是一个int,它的默认值是0(§4.1.2)。
编译器不会抱怨,因为一旦创建了新实例,就会认为m_counter是明确分配的(§5.3.1)。

答案 4 :(得分:1)

如果你写的话,

p可以为null:

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;
    }  
}