在下面的代码块中,为什么我需要在类中声明myData,然后在构造函数中初始化myData = new string [size]?为什么编码私有字符串[] myData = new string [size]是非法的?
也就是说,为什么我需要这样做:
class IntIndexer
{
private string[] myData;
public IntIndexer(int size)
{
myData = new string[size];
for (int i = 0; i < size; i++)
{
myData[i] = "empty";
}
}
}
Run Code Online (Sandbox Code Playgroud)
代替
class IntIndexer
{
private string[] myData = new string[size];
public IntIndexer(int size)
{
for (int i = 0; i < size; i++)
{
myData[i] = "empty";
}
}
}
Run Code Online (Sandbox Code Playgroud)
因为你不知道它的大小,或者它是否存在于构造函数之外.
内联初始化程序作为类中所有构造函数的一部分运行.添加另一个没有大小的构造函数会破坏你的类,如果这是实现的,这是一个混乱的事态.
即使编译器足够聪明以检查所有这些,也可能是混乱的范围滥用.如果在班级的其他地方有一个称为大小的常量字段怎么办?
所有这些都是不试图允许这种事情的原因,并且它有一些宝贵的好处,所以为什么要这么麻烦.
因为size只在运行时才知道构造函数- 而不是编译时.如果你想调整大小myData- 即在编译时知道,那么你可以在声明中做到:
private string[] myData = new string[1000];
Run Code Online (Sandbox Code Playgroud)
要么
private const int DATA_SIZE = 1000;
private string[] myData = new string[DATA_SIZE];
Run Code Online (Sandbox Code Playgroud)