加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么C#中必须使用“新”关键字

发布时间:2020-12-16 00:08:31 所属栏目:百科 来源:网络整理
导读:假设我有一个函数foo,它将vector类作为输入: void Foo( Vector3 vector ); 如果我想调用此函数: Foo( new Vector3(1,2,3) ); 为什么新关键字必不可少(在C#中)? 在其他语言中,例如:C,在这种情况下不需要使用new.这似乎是多余的 编辑1: @ spender以下是完
假设我有一个函数foo,它将vector类作为输入:

void Foo( Vector3 vector );

如果我想调用此函数:

Foo( new Vector3(1,2,3) );

为什么新关键字必不可少(在C#中)?

在其他语言中,例如:C,在这种情况下不需要使用new.这似乎是多余的

编辑1:
@ spender以下是完全有效的C.

Foo ( Vector3(1,3) );

将在堆栈上创建Vector3对象,不需要new / calloc / malloc.

解决方法

该关键字被语言设计者认为是合适的.在C#中,语言强迫您了解正在发生的事情,并且在许多情况下提供错误或警告,它可能会为您隐式添加功能或“填写”数据.

C#总是要求您在使用之前初始化变量.在这种情况下,强制new关键字(对于开发人员)显而易见的是,新实例(如果Vector3是类)或完全构造的类型(如果Vector3是值类型)将被传递到您的方法,而不是到方法调用的结果.

C++ there is no need to use new

请注意,在C中,new不是可选的,至少在不更改函数定义的情况下.使用new意味着Foo()需要不同的语法.

没有new的调用(Foo(Vector3(1,3));)表明Foo被定义为void Foo(Vector3向量).如果你要使用新的Vector3,那么Foo将被定义为void Foo(Vector3 * vector),因为new将返回指向该类型的指针.

这是因为C允许多种形式的对象分配 – 您可以堆栈分配(无新)或在堆上分配(使用new). C#没有这种差异 – 所有引用类型总是在长期存储中分配,值类型根据其上下文和用法在一个位置分配.在对象使用和分配方面,开发人员在C#中的控制级别与C中的控制级别不同.

在一天结束时,每种语言(具有对象的概念)都有自己的语法和规则,用于对象初始化和使用.每种语言都是独一无二的,这也是为什么有这么多不同语言的原因.一般来说,大多数语言是围绕一组管理哲学和应用程序设计的,并且当有可能出现歧义时,需要使用C#的非常明确的方法(即:这是一个类型构造函数还是方法?) .

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读