c# - 为什么要在 C# 中再次分配数组中的每个元素

标签 c# c++ .net memory-management console-application

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

for (int i = 0; i < 10; i++)
        {
            calculators[i] = new Calc();
        }  

有人能解释一下为什么我们需要再次分配内存,这与在 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;

最佳答案

在C#中,有引用类型,也有值类型。类是引用类型。当您创建一个引用类型的变量时,您创建的是一个引用,而不是一个对象。引用的默认状态为空。如果你想让它引用一个对象,你必须用 new 明确地初始化它,或者从另一个初始化的引用中赋值。

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

关于c# - 为什么要在 C# 中再次分配数组中的每个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16421295/

相关文章:

c# - 使用 C# 更改 SQL Server 主键

c++ - 当包含在头文件中时,结构将不起作用

.net - 在代码中创建 NetTcpBinding 时如何设置 ReliableSession.MaxPendingChannels?

C# 从网上下载文件

c# - 在事件再次触发之前等待事件完成

c# - 如何找到所有不同的组合作为字符串字符的不同长度的单位

javascript - 将 Model.ID 绑定(bind)到复选框列表并将 Model.X、Model.Y 等属性发布到 Controller

c++ - 我是 c++ 的新手,你能解释一下这个例子中的指针吗

c++ - 如何在运行时设置数组大小而不构造对象?

c# - 在 IIS 中重新启动应用程序池时立即运行 Application_Start