c# - 新对象过时了吗?

标签 c# java language-design

好的,问题来了……new 关键字是否过时了?

考虑在 C#(我相信还有 java)中有严格的类型规则。类是引用类型,只能在堆上创建。 POD 类型是在栈上创建的;如果你想在堆上分配它们,你必须将它们装箱在一个对象类型中。在 C# 中,structs 是异常(exception),它们可以在堆栈或堆上创建。

鉴于这些规则,我们仍然必须使用 new 关键字是否有意义?语言根据类型使用适当的分配策略不是很有意义吗?

例如,我们目前要写:

SomeClassType x = new SomeClassType();

代替

SomeClassType x = SomeClassType();

甚至只是

SomeClassType x;

编译器会基于正在创建的类型是引用类型,继续在堆上为 x 分配内存。

这适用于其他语言,如 ruby​​、php 等。 C/C++ 允许程序员更好地控制对象的创建位置,因此有充分的理由要求使用 new 关键字。

new 是否只是 60 年代和我们基于 C 的传统的遗留物?

最佳答案

SomeClassType x = SomeClassType();

在这种情况下,SomeClassType() 可能是一个位于其他地方的方法,编译器如何知道是调用这个方法还是创建一个新类。

SomeClassType x;

这不是很有用,大多数人都这样声明他们的变量,有时在需要时稍后填充它们。因此,每次声明变量时都在内存中创建一个实例是没有用的。

关于c# - 新对象过时了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2029351/

相关文章:

c# - 谷歌播放服务 : Cloud Save

c# - WPF DataGridColumn 条件控件

java - 错误: Type mismatch: cannot convert from HSSFWorkbook to Workbook

java - 语义分析

java - 使用 'super' 关键字绑定(bind)泛型

c# - 在程序之间切换时重绘问题

c# - 向查询添加多个参数

java - 为什么此代码在 Vista 中有效,但在 7 中无效?

java - 未调用模拟方法

java - 变量名在接口(interface)声明中有何用处?