语言设计者认为该关键字是合适的。在 C# 中很常见的是,该语言会强制您了解正在发生的事情,并且在许多可能为您隐式添加功能或“填充”数据的情况下提供错误或警告。
C# 总是要求您在使用之前初始化变量。在这种情况下,强制new
关键字使(对开发人员)很明显新实例(如果 Vector3 是类)或完全构造的类型(如果 Vector3 是值类型)将传递给您的方法,而不是方法调用的结果。
C++ 不需要使用 new
请注意,在 C++new
中在这里不是可选的,至少在不更改函数定义的情况下。使用new
将意味着Foo()
需要不同的语法。
没有 new( Foo(Vector3(1,2,3));
) 的调用表明它Foo
被定义为void Foo(Vector3 vector)
。如果您要使用new Vector3
,则 Foo 将被定义void Foo(Vector3* vector)
,因为 new 将返回指向该类型的指针。
这是因为 C++ 允许多种形式的对象分配 - 您可以堆栈分配(不使用 new)或在堆上分配(使用 new)。C# 没有这种区别——所有引用类型总是在长期存储中分配,值类型根据上下文和使用情况分配在一个位置。在对象使用和分配方面,开发人员在 C# 中的控制级别与在 C++ 中不同。
归根结底,每种语言(带有对象的概念)都有自己的语法和对象初始化和使用规则。每种语言都是独一无二的,这也是为什么有这么多不同语言的部分原因。通常,大多数语言都是围绕一组管理哲学和方法设计的,并且在new
可能出现歧义时使用的要求符合 C# 非常明确的方法(即:这是类型构造函数还是方法?)。