当前位置: 首页 > 知识库问答 >
问题:

我如何才能创建一个。NET结构与无参数构造函数?

上官鸿晖
2023-03-14

C#中定义的结构不能具有无参数构造函数。但是,据我所知,CLR允许使用此类构造函数。有。NET库(请参见UnityEngine.CoreModule(即.NET 3.5)中的Vector3等结构)。

问题是,有没有一种简单的方法可以将无参数构造函数添加到我的。NET程序集(不在其源代码中)?我是不是应该在建立了议会的IL之后再搞砸它?团结在他们的大会上怎么可能做到这一点?

UPDATE:实际上,所有的结构都有一个由编译器创建的隐式无参数构造函数,即使定义了参数构造函数(请参阅AndyJ的注释)。Unity3D的结构中没有什么神奇的东西。我仍然对向类添加自定义无参数构造函数的方法感到好奇。

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

共有1个答案

楚修为
2023-03-14

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

 类似资料:
  • 在C#、C和Java中,当你创建一个带参数的构造函数时,默认的无参数构造函数就消失了。我一直只是接受这个事实,但现在我开始想为什么。 这种行为的原因是什么?这仅仅是一个“安全度量/猜测”,说“如果你已经创建了自己的构造函数,你可能不希望这个隐含的函数四处游荡”?或者它有一个技术原因,使得编译器不可能在你自己创建构造函数后添加一个?

  • 我正在浏览hibernate留档,文档说hibernate需要为我们所有的持久类提供一个no-arg构造函数: 无参数构造函数是所有持久类的要求;Hibernate必须使用Java反射为您创建对象。构造器可以是私有的,但是在没有字节码插装的情况下,运行时代理生成和有效的数据检索需要包或公共可见性。 但是当我通过创建一个没有任何无参数构造函数的POJO类并放置一个接受参数的构造函数来创建一个示例程序

  • 我目前在我的大学学习初级java课程,仍然在学习编程的基础知识。这周我们一直在学习构造函数,我被困在本周任务的后半部分,所以任何帮助都将不胜感激。 实验室的第二部分(我一直坚持的部分)的说明如下: 为类Truck编写完整的代码,如下面的类图所示。一定不要在构造函数中使用重复的代码。例如,具有2个参数的构造函数应该调用具有1个参数的构造函数来设置柱体的值。 这些是它想让我做的构造函数。 任何关于如何

  • 我的问题是关于OOP(C)中的构造函数。当我在一个类中将默认构造函数定义为private,并且在main中将该类的一个对象初始化为default时,就会出现默认构造函数不可访问的错误。这很好。但我也在Public部分中使用默认参数构造函数,当我再次在main中初始化对象时,就会出现对函数重载的不明确调用。所以我的问题是,如果不能从main访问私有构造函数,那么编译器应该调用公共部分中的构造函数,这

  • 我编写了以下代码和驱动程序,但我不知道如何使用两个构造函数创建银行账户对象。一个构造函数获取初始余额,第二个构造函数在没有钱的情况下开设账户。此外,Account tBalance是否应该包括有效性检查? 或者,我可以执行以下操作: 将费用作为描述银行账户的一部分。根据需要更新BankAccount类。用户应该能够为每个帐户设置费用金额,并通过一种方法添加费用。向驱动程序添加代码以演示费用功能。(

  • @adilooze解决方案