我开始了解对象的数组,我遇到了一些困难。
我找到了类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变量(它是一个计数器)没有被初始化,但它没有任何问题。为什么没事?
答案 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;
}
}