为什么值类型没有出现默认构造函数?

2023-12-06

下面的代码片段给了我一个类型的构造函数和方法的列表。

static void ReflectOnType(Type type)
{
    Console.WriteLine(type.FullName);
    Console.WriteLine("------------");
    List<ConstructorInfo> constructors =
            type.GetConstructors(BindingFlags.Public | BindingFlags.Static | BindingFlags.NonPublic |BindingFlags.Instance | BindingFlags.Default).ToList();

    List<MethodInfo> methods = type.GetMethods().ToList();

    Type baseType = type.BaseType;

    while (baseType != null)
    {
            constructors.AddRange(baseType.GetConstructors(BindingFlags.Public | BindingFlags.Static | BindingFlags.NonPublic |
                              BindingFlags.Instance | BindingFlags.Default));
            methods.AddRange(baseType.GetMethods());
            baseType = baseType.BaseType;
    }

    Console.WriteLine("Reflection on {0} type", type.Name);

    for (int i = 0; i < constructors.Count; i++)
    {
         Console.Write("Constructor: {0}.{1}", constructors[i].DeclaringType.Name, constructors[i].Name);
         Console.Write("(");
         ParameterInfo[] parameterInfos = constructors[i].GetParameters();
         if (parameterInfos.Length > 0)
         {
             for (int j = 0; j < parameterInfos.Length; j++)
             {
                 if (j > 0)
                 {
                     Console.Write(", ");
                 }
                 Console.Write("{0} {1}", parameterInfos[j].ParameterType, parameterInfos[j].Name);
             }
         }
         Console.Write(")");

         if (constructors[i].IsSpecialName)
         {
             Console.Write(" has 'SpecialName' attribute");
         }
         Console.WriteLine();
     }
     Console.WriteLine();

     for (int i = 0; i < methods.Count; i++)
     {
         Console.Write("Method: {0}.{1}", methods[i].DeclaringType.Name, methods[i].Name);
         // Determine whether or not each field is a special name.
         if (methods[i].IsSpecialName)
         {
             Console.Write(" has 'SpecialName' attribute");
         }
         Console.WriteLine();
     }
 }

但是当我将“int”类型传递给此方法时,为什么在输出中看不到隐式构造函数?或者,如何修改上面的代码以列出默认构造函数(以防我在代码中遗漏某些内容)。


在 C#(和大多数 CLI 语言)中,禁止在结构上指定无参数构造函数,因此,在 C#(和大多数其他 .NET 语言)中创建的结构甚至不会在 IL 中定义无参数构造函数。 CLR 始终使用定义的规则初始化值类型(基本上,用零等值填充所有值),并且 C# 强制将其作为唯一选项。

由于默认的无参数构造函数在 C# 生成的结构中不存在,因此在使用反射时不会显示。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么值类型没有出现默认构造函数? 的相关文章

  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • pthread_cond_timedwait() 和 pthread_cond_broadcast() 解释

    因此 我在堆栈溢出和其他资源上进行了大量搜索 但我无法理解有关上述函数的一些内容 具体来说 1 当pthread cond timedwait 因为定时器值用完而返回时 它如何自动重新获取互斥锁 互斥锁可能被锁定在其他地方 例如 在生产者
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • .Net应用程序设置路径

    默认情况下 Windows 应用程序设置保存在该目录中 USERPROFILE Local Settings Application Data
  • 获取没有非标准端口的原始 url (C#)

    第一个问题 环境 MVC C AppHarbor Problem 我正在调用 openid 提供商 并根据域生成绝对回调 url 在我的本地机器上 如果我点击的话 效果很好http localhost 12345 login Request
  • 如何将图像和 POST 数据上传到 Azure 移动服务 ApiController 终结点?

    我正在尝试上传图片and POST表单数据 尽管理想情况下我希望它是json 到我的端点Azure 移动服务应用 我有ApiController method HttpPost Route api upload databaseId sea
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • 如果使用 SingleOrDefault() 并在数字列表中搜索不在列表中的数字,如何返回 null?

    使用查询正数列表时SingleOrDefault 当在列表中找不到数字时 如何返回 null 或像 1 这样的自定义值 而不是类型的默认值 在本例中为 0 你可以使用 var first theIntegers Cast
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • 如何返回 json 结果并将 unicode 字符转义为 \u1234

    我正在实现一个返回 json 结果的方法 例如 public JsonResult MethodName Guid key var result ApiHelper GetData key Data is stored in db as v
  • 如何将图像路径保存到Live Tile的WP8本地文件夹

    我正在更新我的 Windows Phone 应用程序以使用新的 WP8 文件存储 API 本地文件夹 而不是 WP7 API 隔离存储文件 旧的工作方法 这是我如何成功地将图像保存到 共享 ShellContent文件夹使用隔离存储文件方法
  • 从路径中获取文件夹名称

    我有一些路c server folderName1 another name something another folder 我如何从那里提取最后一个文件夹名称 我尝试了几件事 但没有成功 我只是不想寻找最后的 然后就去休息了 Thank
  • Github Action 在运行可执行文件时卡住

    我正在尝试设置运行google tests on a C repository using Github Actions正在运行的Windows Latest 构建过程完成 但是当运行测试时 它被卡住并且不执行从生成的可执行文件Visual
  • 将文本叠加在图像背景上并转换为 PDF

    使用 NET 我想以编程方式创建一个 PDF 它仅包含一个背景图像 其上有两个具有不同字体和位置的标签 我已阅读过有关现有 PDF 库的信息 但不知道 如果适用 哪一个对于如此简单的任务来说最简单 有人愿意指导我吗 P D 我不想使用生成的
  • WCF:将随机数添加到 UsernameToken

    我正在尝试连接到用 Java 编写的 Web 服务 但有些东西我无法弄清楚 使用 WCF 和 customBinding 几乎一切似乎都很好 除了 SOAP 消息的一部分 因为它缺少 Nonce 和 Created 部分节点 显然我错过了一
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • 为什么 C# Math.Ceiling 向下舍入?

    我今天过得很艰难 但有些事情不太对劲 在我的 C 代码中 我有这样的内容 Math Ceiling decimal this TotalRecordCount this PageSize Where int TotalRecordCount
  • Process.Start 阻塞

    我正在调用 Process Start 但它会阻止当前线程 pInfo new ProcessStartInfo C Windows notepad exe Start process mProcess new Process mProce
  • 使用 libcurl 检查 SFTP 站点上是否存在文件

    我使用 C 和 libcurl 进行 SFTP FTPS 传输 在上传文件之前 我需要检查文件是否存在而不实际下载它 如果该文件不存在 我会遇到以下问题 set up curlhandle for the public private ke
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我

随机推荐

  • 无法在 Windows 10 Pro 上启动 docker?

    Problem 当我尝试启动 docker 桌面时 它给我留下了这个错误 Unable to create The running command stopped because the preference variable ErrorA
  • .NET 客户端通过 SSL 连接到 IBM MQ

    我从客户端获得了密钥文件 我需要使用它们通过 SSL 连接到 MQ 我们从客户那里得到的文件是 xxx crl xxx kdb xxx rdb xxx sth xxx tab 他们说的是客户端频道表 我正在尝试使用以下代码进行连接 他们说我
  • 将 UTC 日期时间字符串转换为本地日期时间

    我从来没有需要在 UTC 和 UTC 之间进行时间转换 最近有人请求让我的应用程序了解时区 但我一直在兜圈子 有关将本地时间转换为 UTC 的大量信息 我发现这些信息相当简单 也许我也做错了 但我找不到任何有关轻松将 UTC 时间转换为最终
  • 如何在C#中访问匿名类型的属性?

    我有这个 List nodes new List nodes Add new Checked false depth 1 id div d Id 我想知道是否可以获取匿名对象的 Checked 属性 我不确定这是否可能 尝试这样做 if n
  • 如何在 Angular 2 上实现自定义验证器?

    如何在 Angular 2 中实现自定义验证器 I found 这个笨蛋 constructor private fb FormBuilder this form fb group singleSelection Rio App valid
  • 为什么 C 应用程序不先打印消息然后接收用户输入

    我正在尝试编写一个打印提示并接受用户输入的 C 应用程序 我用 fgets 编写了一个简单的程序 但它确实工作正常 我正在使用 eclipse c c 工具包 当我保存 gt 构建 gt 运行时 控制台保持空白 如果我输入一些输入 程序就会
  • apc vs eaccelerator vs xcache

    我正在研究使用其中哪一个 但我真的找不到一个脱颖而出的 E加速器比APC 但APC维护得更好 Xcache更快 但其他的语法更简单 有人对使用哪些建议以及为什么使用有建议吗 APC 将包含在 PHP 6 中 我猜选择它是有充分理由的 它的安
  • vector.push_back 上的“glibc free():无效的下一个大小(快速)”?

    当我运行我的程序时 它偶尔会崩溃并给出以下错误 检测到 glibc pathtoexecutable free 下一个大小无效 快速 回溯导致一个成员函数只调用向量的push back函数 void Path add Position p
  • 用于将重复行插入另一个表的插入触发器之前

    我有一张桌子叫tblspmaster其中 sp 列我有唯一索引 因此不会插入重复项 但我想将重复行插入到tblspduplicate 所以我决定为此编写触发器 IN 主表是tblspmaster记录将使用加载文件插入mysql create
  • 条形图上的错误栏

    我试图得到 一个漂亮的组条形图 我希望每个条形上都有误差条 如下所示 或类似的 由您自行决定 我有办法 ff Medical eq Patient Hygiene Near bed Far bed Direct 1 2759 0 9253
  • 为什么我的 XML 阅读器读取所有其他元素?

    我构建了一个非常简单的表格 显示 4 列和 4 行 执行以下代码时 它会显示 xml 文件中的所有其他元素 它不区分每个表行 它读起来没有任何问题 而且我已经运行了 xml 验证器 所以这不是语法问题 public partial clas
  • 什么时候需要条件变量,互斥锁还不够吗?

    我确信互斥锁还不够 这就是条件变量概念存在的原因 但这让我很困惑 当条件变量至关重要时 我无法用具体的场景说服自己 条件变量 互斥锁和锁之间的区别问题的接受答案说条件变量是 带有 信号 机制的锁 当线程需要时使用它 等待资源变得可用 线程可
  • FFMPEG 链接错误

    我正在尝试编译此版本的修改版本来自 FFMPEG 站点的转码示例 我已经使用了所有必需的包含并使用此加入了库 INCLUDEPATH FFMPEG DEV PATH include LIBS L FFMPEG DEV PATH lib la
  • 无论如何,我可以突出显示 JTable 中的一行吗?

    我目前正在使用 JTable 和 DefaultTableModel 构建数据库 在我的程序中我 具有允许用户搜索数据库的功能 我已经构建了搜索部分 但没有 知道如何突出显示 JTable 中的行或单元格 有人可以帮帮我吗 谢谢 您确定要突
  • PHP 访问数组值[重复]

    这个问题在这里已经有答案了 我正在尝试访问我创建的数组的值 但似乎失败了 我正在循环发送 VIA http 的数组 并添加docno and entryno到名为的新数组 ArrID 它可以添加到新数组中 但是当我尝试访问ArrID似乎没有
  • Sequelize 连接模型包括多对多

    假设我有三个这样的模型 var User define user username Sequelize INTEGER var UserPubCrawl define userpubcrawl user id Sequelize STRIN
  • Python中重新赋值会从内存中删除之前的值吗?

    gt gt p 5 gt gt id p 140101523888800 gt gt p 5 56 gt gt id p 140100617985840 我知道将新值分配给现有变量时 它指向内存中存储新值的新位置 但我的问题是 包含先前值的
  • selenium python 中 find_element_by_class_name 的属性是什么?

    browser webdriver Firefox browser get url divs browser find elements by class name class browser find element by class n
  • 使用 C 中的 regex.h 计算匹配数

    我正在使用 POSIX 正则表达式regex h用 C 语言计算英语文本片段中短语出现的次数 但返回值是regexec 只告诉是否找到匹配项 所以我尝试使用nmatch and matchptr找到不同的外观 但是当我打印出匹配项时matc
  • 为什么值类型没有出现默认构造函数?

    下面的代码片段给了我一个类型的构造函数和方法的列表 static void ReflectOnType Type type Console WriteLine type FullName Console WriteLine List