Structs defined in C# can't have parameterless constructors. 但是,据我了解,CLR允许使用此类构造函数。有包含它们的.NET库(请参见UnityEngine.CoreModule中的Vector3之类的结构,即.NET 3.5)。
问题是,是否有一种简单的方法可以向.NET程序集中的某些结构(而不是其源代码)中添加无参数的构造函数?构建该程序集后,我是否应该以某种方式弄乱它? Unity可能如何通过组装实现这一目标?
更新:实际上,即使已定义了有参数的构造函数,所有的结构也都有由编译器创建的隐式无参数构造函数(请参见下面的AndyJ注释)。 Unity3D的结构中没有神奇的东西。我仍然对将 custom 无参数构造函数添加到类中的方法感到好奇。
我知道这样的构造函数的行为会引起混乱(请参阅链接的问题),但是无论如何我都很好奇。如果有人感兴趣,为什么:这一切都从我的DI容器(Zenject)开始,在某些情况下,这是尝试使用有参数的构造函数创建我的结构实例。它失败了,因为它不知道如何在我的结构的构造函数中解析原始类型(如Int32)。通过创建从Int32到0的绑定,我可以轻松避免这种情况;但是,在意识到这一点之前,我的好奇心已经唤醒。
答案 0 :(得分:0)
您始终可以通过实现“ MakeEmptyStruct”方法来欺骗系统,该方法创建并返回(或分配)具有默认值的结构之一