如果Int32只是int的别名,那么Int32类怎么能使用int呢?

2023-12-09

一直在浏览 .NET 源代码.NET框架参考源,只是为了好玩。并发现了一些我不明白的东西。

有一个Int32.cs包含 C# 代码的文件Int32类型。不知怎的,这对我来说似乎很奇怪。 C#编译器如何编译代码Int32 type?

public struct Int32: IComparable, IFormattable, IConvertible {
    internal int m_value;

    // ... 
}

但这在 C# 中不是非法的吗?如果int只是一个别名为 Int32,它应该无法编译错误CS0523:

“struct1”类型的结构成员“struct2 field”导致结构布局中出现循环。

编译器有什么魔力吗,还是我完全偏离了轨道?


这在C#中不是非法的吗?如果“int”只是“Int32”的别名,则它应该无法编译并出现错误 CS0523。编译器有什么魔力吗?

是的;该错误在编译器中被故意抑制。如果相关类型是内置类型,则完全跳过循环检查器。

通常这种事情是非法的:

struct S { S s; int i; }

在这种情况下,S 的大小是未定义的,因为无论 S 的大小是多少,它都必须等于其自身加上 ​​int 的大小。没有这样的尺寸。

struct S { S s; }

在这种情况下,我们没有任何信息可以推断出 S 的大小。

struct Int32 { Int32 i; }

但在这种情况下,编译器提前知道System.Int32是四个字节,因为它是一个非常特殊的类型。

顺便说一句,C# 编译器(以及 CLR)如何确定一组结构类型何时是循环的细节非常有趣。我会尝试在某个时候写一篇关于此的博客文章。

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

如果Int32只是int的别名,那么Int32类怎么能使用int呢? 的相关文章

  • 用于代数简化和求解的 C# 库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 网络上有很多代数求解器和简化器 例如 algebra com 上不错的代数求解器和简化器 然而 我正在
  • 注销租约抛出 InvalidOperationException

    我有一个使用插件的应用程序 我在另一个应用程序域中加载插件 我使用 RemoteHandle 类http www pocketsilicon com post Things That Make My Life Hell Part 1 App
  • 如何将 protobuf-net 与不可变值类型一起使用?

    假设我有一个像这样的不可变值类型 Serializable DataContract public struct MyValueType ISerializable private readonly int x private readon
  • ClickOnce 应用程序错误:部署和应用程序没有匹配的安全区域

    我在 IE 中使用 FireFox 和 Chrome 的 ClickOnce 应用程序时遇到问题 它工作正常 异常的详细信息是 PLATFORM VERSION INFO Windows 6 1 7600 0 Win32NT Common
  • C中的malloc内存分配方案

    我在 C 中尝试使用 malloc 发现 malloc 在分配了一些内存后浪费了一些空间 下面是我用来测试 malloc 的一段代码 include
  • 在 LINQ 中按 Id 连接多表和分组

    我想按categoryId显示列表产品的名称组 这是我的代码 我想要我的视图显示结果 Desktop PC HP Red PC Dell Yellow PC Asus Red SmartPhone Lumia 720 Blue 我的组模型
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • 具有交替类型的可变参数模板参数包

    我想知道是否可以使用参数包捕获交替参数模式 例如 template
  • 如何在 Xaml 文本中添加电子邮件链接?

    我在 Windows Phone 8 应用程序中有一些大文本 我希望其中有电子邮件链接 例如 mailto 功能 这是代码的一部分
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • C# 中的合并运算符?

    我想我记得看到过类似的东西 三元运算符 http msdn microsoft com en us library ty67wk28 28VS 80 29 aspx在 C 中 它只有两部分 如果变量值不为空 则返回变量值 如果为空 则返回默
  • 使用管道时,如果子进程数量大于处理器数量,进程是否会被阻塞?

    当子进程数量很大时 我的程序停止运行 我不知道问题是什么 但我猜子进程在运行时以某种方式被阻止 下面是该程序的主要工作流程 void function int process num int i initial variables for
  • 为什么 gcc 抱怨“错误:模板参数 '0' 的类型 'intT' 取决于模板参数”?

    我的编译器是gcc 4 9 0 以下代码无法编译 template
  • 使用 %d 打印 unsigned long long

    为什么我打印以下内容时得到 1 unsigned long long int largestIntegerInC 18446744073709551615LL printf largestIntegerInC d n largestInte
  • C++ 函数重载类似转换

    我收到一个错误 指出两个重载具有相似的转换 我尝试了太多的事情 但没有任何帮助 这是那段代码 CString GetInput int numberOfInput BOOL clearBuffer FALSE UINT timeout IN
  • 按 Esc 按键关闭 Ajax Modal 弹出窗口

    我已经使用 Ajax 显示了一个面板弹出窗口 我要做的是当用户按 Esc 键时关闭该窗口 这可能吗 如果有人知道这一点或以前做过这一点 请帮助我 Thanks 通过以下链接 您可以通过按退出按钮轻松关闭窗口 http www codepro
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • 方法优化 - C#

    我开发了一种方法 允许我通过参数传入表 字符串 列数组 字符串 和值数组 对象 然后使用这些参数创建参数化查询 虽然它工作得很好 但代码的长度以及多个 for 循环散发出一种代码味道 特别是我觉得我用来在列和值之间插入逗号的方法可以用不同的
  • 无法接收 UDP Windows RT

    我正在为 Windows 8 RT 编写一个 Windows Store Metro Modern RT 应用程序 需要在端口 49030 上接收 UDP 数据包 但我似乎无法接收任何数据包 我已按照使用教程进行操作DatagramSock
  • Oracle Data Provider for .NET 不支持 Oracle 19.0.48.0.0

    我们刚刚升级到 Oracle 19c 19 3 0 所有应用程序都停止工作并出现以下错误消息 Oracle Data Provider for NET 不支持 Oracle 19 0 48 0 0 我将 Oracle ManagedData

随机推荐

  • 如何访问脚本组件内的 ssis 包变量

    如何访问我在数据流 gt 脚本组件 gt 我的 C 脚本和 SSIS 包中使用的 C 代码中的变量 我已经尝试过 但也不起作用 IDTSVariables100 varCollection null this VariableDispens
  • 如何使用printf显示off_t、nlink_t、size_t等特殊类型?

    在我的程序中 我统计他们想要的文件并将数据发送过去 统计数据的字段struct都是特殊类型 struct stat dev t st dev ID of device containing file ino t st ino inode n
  • python,从(1,n)中随机选择#k个数字,不包括列表中的数字

    对于给定的 except list 3 5 8 n 30 k 5 我想在 1 到 30 之间选择 5 k 个随机数 但我不应该在排除列表中选择数字 假设 except list n 可能很大 当不需要排除时 很容易得到k个随机样本 rand
  • CSS 链接边框样式不适用于 a:visited

    问题在于链接边框样式 我可以在悬停时更改它 但边框 visited不起作用 这是我所拥有的示例 a link color 536DFE text decoration none border bottom dashed 1px transi
  • WCF WSDL + 可空属性

    我有一个 WCF 服务扁平化 WSDL 另一端的消费者告诉我 nillable true 属性正在将它们连接起来 我尝试在服务合同中设置 EmitDefaultValue false 但我没有注意到行为有任何变化 诚然 我以前从未深入研究过
  • 如何在 UICollectionViewCell 中设置 UILabel

    我有一个带有 UIViewController 的应用程序 其中包含 UICollectionView IBOutlet UICollectionView 中的单元格是 MyCustomCell 并使用此方法设置其 UILabel void
  • .NET 的 RSS 解析器 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 对于 NET 中的 RSS
  • 如何使用 Three.js 绘制平行线?

    我对矩阵变换的概念很陌生 我尝试在正交方向上偏移一条线 我想到的是 line translate offsetPixels new THREE Vector3 1 1 0 它沿着向量中定义的轴平移一条线 所以我的问题是如何定义向量中的轴以获
  • 在不同端点上实现多个协定的服务类的 WCF 配置

    我有一个MyService类实现IService1 and IService2接口 我想在两个不同的端点上公开这两个合约 例如 IService1暴露于 Service S1 IService2暴露于 Service S2 这样的配置会是什
  • 如何在vb.net中解码url

    此行表示服务器未声明 Dim DecodedString As String server UrlDecode context Request Form DeckName 我在顶部导入了 system web 似乎无法弄清楚为什么它不起作用
  • 为什么我的 hello world 二进制文件大部分为零?

    我已经编译了 include
  • 将文件分成小块复制

    我想以小块的形式复制文件 如果需要的话取消复制操作 我正在尝试遵循此处未标记的解决方案 如何复制文件并具有取消复制的功能 但我得到一个 0 字节文件 我做错了什么 Public Class Form1 Dim cancelled As Bo
  • J2ME RecordStore 中的数据不会跨会话持续存在

    我正在使用 J2ME 构建一个移动应用程序 我发现我写入 RecordStore 的数据可以在程序仍在运行时访问 但在退出并重新启动后会丢失 没有抛出异常 数据只是丢失了 UPDATE 感谢大家的建议 我在 Windows 7 上使用 Ne
  • 在 VBA 中将变量从窗体传递到模块

    我在表单上有以下按钮 Private Sub CommandButton1 Click Dim pass As String pass UserForm1 TextBox1 Unload UserForm1 End Sub 然后我有一个名为
  • Tensorflow:会话图为空。 Python

    大家好 我正在使用 Tensorflow 2 0 在这些代码行中 import tensorflow as tf hello tf constant Hello World sess tf compat v1 Session sess ru
  • 使用自签名证书在 android 中创建安全的客户端-服务器连接

    我正在开发一个企业 Android 应用程序 因此有必要在测试阶段在客户端 Android 模拟器 测试手机 和服务器之间创建安全连接 即使服务器的证书是自签名的 而购买的是合法证书由公司 目前超出我的控制范围 我需要信任服务器的自签名证书
  • Autodesk Viewer 中出现 webGL 错误

    我收到如下错误 未捕获的类型错误 无法读取 null 的属性 webglFramebuffer 当我转到与附加了 Autodesk Viewer 的页面链接的另一个页面时 我不知道它为什么会来 我在我的网站上使用 angularjs 并且该
  • 显示 JComboBox 的不可选择的默认值

    我有一个JComboBox包含三个项目 Personel Magasinier Fournisseur 我要这个JComboBox显示值 Choisir une option 这是一个不可选择的值 我之后尝试了这段代码initCompone
  • 自定义异常处理程序

    我需要编写一个自定义异常处理程序 我的应用程序可能会抛出不同类型的异常 我希望它们全部由单个处理程序处理 这样我就不需要使用数千个 try catch 块 我尝试使用AppDomain的UnhandledException处理程序 但似乎当
  • 如果Int32只是int的别名,那么Int32类怎么能使用int呢?

    一直在浏览 NET 源代码 NET框架参考源 只是为了好玩 并发现了一些我不明白的东西 有一个Int32 cs包含 C 代码的文件Int32类型 不知怎的 这对我来说似乎很奇怪 C 编译器如何编译代码Int32 type public st