c# - 如何使用无参数构造函数创建 .NET 结构?
问题描述
C# 中定义的结构不能有无参数的构造函数。 但是,据我了解,CLR 允许使用此类构造函数。有包含它们的 .NET 库(请参阅 UnityEngine.CoreModule 中的 Vector3 等结构,即 .NET 3.5)。
问题是,是否有一种简单的方法可以将无参数构造函数添加到我的 .NET 程序集(而不是其源代码)中的某些结构中?我应该在构建它之后以某种方式弄乱程序集的 IL 吗?Unity 怎么可能通过他们的组装实现这一目标?
更新:实际上所有结构都有一个由编译器创建的隐式无参数构造函数,即使定义了一个有参数的构造函数(参见下面的 AndyJ 的评论)。Unity3D 的结构没有什么神奇之处。我仍然对向类添加自定义无参数构造函数的方法感到好奇。
我知道此类构造函数的行为会引起混淆(请参阅链接的问题),但无论如何我很好奇如何拥有一个。如果有人对为什么感兴趣:这一切都是从我的 DI 容器 (Zenject) 开始的,在某些情况下,它试图使用带参数的构造函数创建我的结构的实例。它失败了,因为它不知道如何在我的结构的构造函数中解析原始类型(如 Int32)。我可以通过创建一个从 Int32 到 0 的绑定来轻松避免这种情况——但是,在意识到这一点之前,我的好奇心已经被唤醒了。
解决方案
您始终可以通过实现“MakeEmptyStruct”方法来欺骗系统,该方法创建并返回(或分配)具有默认值的结构之一
推荐阅读
- angular - 有没有办法根据从这些选项卡的内容提交的表单在角度材料选项卡之间切换?
- c# - CertCreateSelfSignCertificate 返回 null,错误代码为 87
- python - 如何删除(弹出)Keras InceptionV3 预训练模型的初始层?
- node.js - 如何更新多个文档?
- angular - Jasmine 抛出错误:超时 - 在 jasmine.DEFAULT_TIMEOUT_INTERVAL 指定的超时内未调用异步回调
- c# - 如何在 Revit API 中捕获 Revit 错误?
- android - Seekbar 在 viewpager 内无法平滑滚动
- sql-server - 资源池默认系统内存不足,无法运行此查询
- dart - 消除原子钟 API 调用的延迟
- java - 如何使用休眠映射数据库表上的继承类?