其他分享
首页 > 其他分享> > 防止使用new()构建对象

防止使用new()构建对象

作者:互联网

在Unity游戏引擎中,尽管MonoBehaviour类的默认构造函数是公共的,但不能使用new()运算符构造所有源自MonoBehaviour类的类.这样做会在Unity日志中返回警告,并且不会实例化该对象,而将引用保留为空.

我很好奇它们在构造函数调用时如何防止对象被创建.我进行了一些研究,听说在对象的构造函数中抛出异常会阻止其创建,因此我自己进行了尝试,并且在构造函数之外处理异常时它可以工作.但是,我仍然不了解它们如何使用正确的方法(AddComponent< T>())实例化该类.

有任何想法吗?

解决方法:

在普通香草C#中,new运算符不可能返回null.它将返回有效的非null引用,或者将引发异常.

但是请注意,Unity不是“普通香草C#”. Unity基于Mono(后者又基于.NET),但已针对其自身目的进行了自定义.

控制编译器和运行时意味着您可以执行各种非标准的事情.像这样,提供一种机制,如果新运算符与无效类型一起使用(例如,MonoBehavior的任何子类),则允许该运算符返回null.并且,例如,提供AddComponent T()可以使用的替代分配机制.

对于Stack Overflow而言,所有这些内部工作的详细描述都太广泛了(无论如何,我不知道具体细节).但是考虑到Mono是开源的,我认为该许可证是要求Unity对该开源进行修改的许可证之一.即如果您真的想了解所有细节,则只需浏览实际的源代码,然后查看它们的工作方式即可.

标签:unity3d,new-operator,c
来源: https://codeday.me/bug/20191028/1950910.html