C# 中的数组声明语法是否有原因?
Is there a reason for array declaration syntax in C#?
我想知道语法背后的原因是什么?我的意思是这样的:
int[ , ] arrayName = new int[10,10];
如果我们有类似的东西,会不会更简单:
int[10,10] arrayName ;
是什么原因导致软件架构师做出这样的决定?
这个
int[ , ] arrayName = new int[10,10];
已经在内存中初始化变量并实例化。此外,您可以在运行时更改数组的大小,例如
arrayName = new int[20,20]
另一方面
int[10,10] arrayName ;
将只为数组声明变量。 arrayName
然后还是null
.
这是因为您可以在一个作用域中声明变量,然后在另一个作用域中对其进行初始化(通常在构造函数中)。
像这样:
public class Foo
{
private int[ , ] Bar; // Bar will be null until initialized
public Foo(int a, int b)
{
Bar = new int[a, b];
}
}
int[,] arrayName = new int[10,10];
只有左边在声明数组,右边在初始化它。对于 C# 中的大多数(如果不是全部)变量来说都是如此。例如
string test; //declaring
test = "test"; //initialising
string test = "test"; //declare and initialise
对于 int[10,10] arrayName;
,您承诺数组大小。如果我这样做会发生什么?
int[10,10] arrayOne;
int[11,11] arrayTwo;
arrayOne = arrayTwo;
数组对象只是指向托管内存块的指针。知道这一点,arrayOne = arrayTwo
在技术上必须是合法的。
因此,说它是int[10,10]
实际上是在撒谎。它可能以这种方式开始,但它可以随时重新分配到不同维度的数组中。
我想知道语法背后的原因是什么?我的意思是这样的:
int[ , ] arrayName = new int[10,10];
如果我们有类似的东西,会不会更简单:
int[10,10] arrayName ;
是什么原因导致软件架构师做出这样的决定?
这个
int[ , ] arrayName = new int[10,10];
已经在内存中初始化变量并实例化。此外,您可以在运行时更改数组的大小,例如
arrayName = new int[20,20]
另一方面
int[10,10] arrayName ;
将只为数组声明变量。 arrayName
然后还是null
.
这是因为您可以在一个作用域中声明变量,然后在另一个作用域中对其进行初始化(通常在构造函数中)。
像这样:
public class Foo
{
private int[ , ] Bar; // Bar will be null until initialized
public Foo(int a, int b)
{
Bar = new int[a, b];
}
}
int[,] arrayName = new int[10,10];
只有左边在声明数组,右边在初始化它。对于 C# 中的大多数(如果不是全部)变量来说都是如此。例如
string test; //declaring
test = "test"; //initialising
string test = "test"; //declare and initialise
对于 int[10,10] arrayName;
,您承诺数组大小。如果我这样做会发生什么?
int[10,10] arrayOne;
int[11,11] arrayTwo;
arrayOne = arrayTwo;
数组对象只是指向托管内存块的指针。知道这一点,arrayOne = arrayTwo
在技术上必须是合法的。
因此,说它是int[10,10]
实际上是在撒谎。它可能以这种方式开始,但它可以随时重新分配到不同维度的数组中。