首页 > 解决方案 > 如何使用无参数构造函数创建 .NET 结构?

问题描述

C# 中定义的结构不能有无参数的构造函数。 但是,据我了解,CLR 允许使用此类构造函数。有包含它们的 .NET 库(请参阅 UnityEngine.CoreModule 中的 Vector3 等结构,即 .NET 3.5)。

问题是,是否有一种简单的方法可以将无参数构造函数添加到我的 .NET 程序集(而不是其源代码)中的某些结构中?我应该在构建它之后以某种方式弄乱程序集的 IL 吗?Unity 怎么可能通过他们的组装实现这一目标?

更新:实际上所有结构都有一个由编译器创建的隐式无参数构造函数,即使定义了一个有参数的构造函数(参见下面的 AndyJ 的评论)。Unity3D 的结构没有什么神奇之处。我仍然对向类添加自定义无参数构造函数的方法感到好奇。

我知道此类构造函数的行为会引起混淆(请参阅链接的问题),但无论如何我很好奇如何拥有一个。如果有人对为什么感兴趣:这一切都是从我的 DI 容器 (Zenject) 开始的,在某些情况下,它试图使用带参数的构造函数创建我的结构的实例。它失败了,因为它不知道如何在我的结构的构造函数中解析原始类型(如 Int32)。我可以通过创建一个从 Int32 到 0 的绑定来轻松避免这种情况——但是,在意识到这一点之前,我的好奇心已经被唤醒了。

标签: c#structconstructor

解决方案


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


推荐阅读