为什么数组中的每个元素都应该在c#中再次分配

Zoo*_*mIn 1 .net c# c++ memory-management console-application

以下是我编写的代码 Calc[] calculators = new Calc[10]; calculators[0].AddToSum(10);(编写相应的类和方法).但是我得到了"对象引用未设置为对象的实例"异常.然后通过一些研究我通过执行以下操作删除了异常.

for (int i = 0; i < 10; i++)
        {
            calculators[i] = new Calc();
        }  
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么我们需要再次分配内存,这与c/c ++不同.这就是我在c ++中的表现:

Calculator *calc=new Calculator[10]//I know I need to check for std::bad_alloc exception
calculators[0].AddToSum(10); 
delete[] calc;
Run Code Online (Sandbox Code Playgroud)

Ben*_*ley 5

在C#中,有引用类型,并且有值类型.类是引用类型.创建引用类型的变量时,您将创建引用,而不是对象.引用的默认状态为null.如果您希望它引用一个对象,则必须使用new或使用另一个初始化引用来显式初始化它.

C++没有这种区别.每种类型都是值类型(尽管您也可以创建对任何类型的引用).创建值类型的变量时,您将创建一个对象.