如何使用无参数构造函数创建.NET结构?

时间:2019-01-07 12:15:13

标签: c# struct constructor

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的绑定,我可以轻松避免这种情况;但是,在意识到这一点之前,我的好奇心已经唤醒。

1 个答案:

答案 0 :(得分:0)

您始终可以通过实现“ MakeEmptyStruct”方法来欺骗系统,该方法创建并返回(或分配)具有默认值的结构之一