标签:unity3d new-operator c
在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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。