gpt4 book ai didi

c# - 防止使用 new() 构造对象

转载 作者:行者123 更新时间:2023-11-30 15:25:39 25 4
gpt4 key购买 nike

在 Unity 游戏引擎中,所有派生自 MonoBehaviour 类的类都不能使用 new() 运算符构造,尽管它们的默认构造函数是公共(public)的。这样做会在 Unity 日志中返回一条警告,并且对象不会被实例化,从而使引用为空。

我很好奇他们是如何设法阻止在调用构造函数时创建对象的。我做了一些研究,听说在对象的构造函数中抛出异常可以阻止它的创建,所以我自己尝试了一下,当在构造函数外部处理异常时它起作用了。但是,我仍然不明白他们实际上是如何使用正确的方法 ( AddComponent<T>() ) 实例化类的。

有什么想法吗?

最佳答案

在普通 C# 中,new 是不可能的运算符返回 null .它要么返回有效的非空引用,要么抛出异常。

但是请注意,Unity 不是“普通的 C#”。 Unity 基于 Mono(而 Mono 又基于 .NET),但根据自己的目的进行了定制。

控制编译器和运行时意味着您可以做各种非标准的事情。比如,提供一种机制来允许 new运算符返回 null结果,如果它与无效类型一起使用(即 MonoBehavior 的任何子类)。并且,例如,提供一种替代分配机制 AddComponent<T>()可以用。

对所有这些内部工作原理的详细描述对于 Stack Overflow 来说过于宽泛(而且我也不知 Prop 体细节)。但鉴于 Mono 是开源的,我认为该许可证是需要 Unity 对该开源的修改也可用的许可证之一。 IE。如果您真的想了解所有细节,您可以浏览实际的源代码并具体了解他们是如何做到的。

关于c# - 防止使用 new() 构造对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30689559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com