如何在 CIL 中声明值类型:`.class value` 还是只是 `.class`?

2024-01-07

我看过 C#struct FooStruct in ILDASM http://msdn.microsoft.com/en-us/library/f7dy01k1.aspx,并看到以下内容:

ILDASM 此处显示两个不同的声明:

  • 一个开始于.class value public(后窗和前窗的标题栏)
  • 一个从刚刚开始.class public(前窗)

我想知道哪种语法(如果不是两种)是声明值类型的正确语法?是个value修饰符是严格必需的,还是可选的,还是语法错误?


简短回答:值类型定义只需要extends [mscorlib]System.ValueType; the value属性似乎是可选的并且没有明显的效果。

我假设 CLI 规范 (ECMA-335 http://www.ecma-international.org/publications/standards/Ecma-335.htm)将是寻找权威答案的最佳地点。

值类型定义必须包含value属性?

II.10 节涉及定义类型。更具体地说,第 II.10.1.3 小节规定:

类型语义属性指定是否应定义接口、类或值类型。 ……如果[interface] 属性不存在且定义扩展 (直接或间接)System.ValueType,并且定义不适用于System.Enum,应定义一个值类型(§II.13)。否则,应定义一个类(§II.11)。

The value整个部分根本没有提到属性。

结论:正确的值类型定义不必包括value。源自System.ValueType足够了。

值类型定义可以包括value修改器?

CLI 标准还包含 ILASM 语法(在第 VI.C.3 节中)。根据该语法,存在一个value属性为.class类型定义。我还搜索了具体值类型定义的标准,并找到了以下示例:

  • .class public sequential ansi serializable sealed beforefieldinit System.Double extends System.ValueType …
  • .class private sealed Rational extends [mscorlib]System.ValueType …
  • .class value sealed public MyClass extends [mscorlib]System.ValueType …

结论: A value属性可以包含在值类型定义中。

以及什么是value属性 平均值?

我尝试将这三个 IL 类型定义编译成程序集:

.class       public sealed … A extends [mscorlib]System.ValueType { … }
.class value public sealed … B extends [mscorlib]System.ValueType { … }
.class value public sealed … C extends [mscorlib]System.Object    { … }  // !!!

没有编译错误,尽管value属性用于引用类型声明(参见最后一行)。使用 Visual Studio 2012 的对象浏览器查看生成的程序集会发现两种值类型(struct) A and B,和一种引用类型(class) C.

推测:的存在value属性对类型定义没有任何影响。它只是作为人类发现值类型定义的潜在帮助。

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

如何在 CIL 中声明值类型:`.class value` 还是只是 `.class`? 的相关文章

  • MATLAB 黑洞变量

    MATLAB 是否有 黑洞 或丢弃变量 假设我正在做类似的事情 rows cols size A 但我不想存储行 是否有一个 黑洞 变量可以让我发送值去死 所以任务就像 BLACKHOLE cols size A 其中 BLACKHOLE
  • PHP 脚本语言还是编程语言? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我一直不明白为什么PHP被称为 脚本语言 而不是 编程语言 我将自己介绍为 PHP 程序员 是错误的吗 我应该是 PHP 脚本编写者 吗 编程语言和脚
  • Rust 的一元 || 是什么意思? (平行管)是什么意思?

    In 非词汇生命周期 简介 http smallcultfollowing com babysteps blog 2016 04 27 non lexical lifetimes introduction Niko 包含以下片段 fn ge
  • struct{} 和 struct{}{} 在 Go 中如何工作?

    我想知道 Go 中的 struct 和 struct 是什么意思 示例如下 array index struct or make map type struct struct is a keyword https golang org re
  • 我必须遵循哪些规则才能编写没有分号的有效 Javascript?

    有很多关于 我应该使用分号吗 的问题 和 分号注入是如何工作的 但我想为那些决定尽可能避免使用分号的程序员找到无 FUD 的建议 如果有人有 比如izs http izs me 或者 Bootstrap 开发者 选择在什么条件下编写不带分号
  • 未定义的 C/C++ 符号作为运算符

    我注意到字符 符号 和 在 C C 中不用作运算符 有谁知道原因或历史原因吗 如果确实没有使用它 使用 define 将这些符号定义为另一个运算符 语句是否安全 通常情况下 define只接受宏名称中的有效标识符 所以你不能这样做 defi
  • for 循环语法,其中包含 if 语句

    使用 if 语句编写 for 循环的普遍共识是什么 for int i 0 i lt hi i if some invalid condition continue if another invalid condition continue
  • .NET VM 是编译器还是解释器?

    NET 的虚拟机是编译 CIL 字节码 然后在最低级别 CPU 汇编程序 执行代码 还是解释器 读取以下指令并执行它们 NET 的虚拟机吗 编译 CIL 字节码 然后 在最低级别执行代码 CPU 汇编器 是的 它是 CLR 的一个组件 称为
  • 定义Python字典时,如何使用给定字段的值来计算其他字段?

    考虑代码 a 2 b 3 mylist a a b b product a b 这会生成一个包含三个字段的字典 其中第三个字段是使用第一个和第二个字段的值计算的 我正在寻找更紧凑的定义mylist 我已经尝试过 1 mylist a 2 b
  • MS-Access 查询中的语法错误(缺少运算符)

    以下查询给了我 missing operator 语法错误 所需的输出是表中数据的组合 dbo tbl 和意见 vw 我用过的所有钥匙都存在 有任何想法吗 SELECT dbo tbl BOD fpartno AS PartNumber d
  • Python给出语法错误但没有错误? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 有人能说为什么 python 不允许这样做吗 coding utf 8 import win32api win32con os t
  • C 中的复合语句表达式

    下面的代码不起作用 int i void 999 100 添加括号就可以了 为什么 int i void 999 100 还有另一种方法可以完成此类分配 int i void 999 100 是什么让他们与众不同 在这份声明中 int i
  • 使用 cmake add_definitions 的文件路径

    我正在尝试替换硬编码预处理器 define MY FILE PATH usr local myfile 在 cmake 中使用 add definitions add definitions DMY FILE PATH MY FILE PA
  • 为什么这个 if 语句会导致语法错误

    我正在尝试设置一个 elif 语句 如果用户按下 Enter 键 代码将继续 但是我不断遇到语法错误 GTIN 0 while True try GTIN int input input your gtin 8 number if len
  • Scala 的“神奇”函数列表

    在哪里可以找到 Scala 的 神奇 函数列表 例如apply unapply update etc 魔法函数是指编译器的某些语法糖使用的函数 例如 o update x y lt gt o x y 我用谷歌搜索了一些组合scala mag
  • 这个指针操作还有其他语法吗?

    这是一个非常基本的问题 但我不知道如何谷歌它 我有一个指向向量 或指针数组 的指针 比如说 vector
  • 您可以将操作直接应用于map/reduce/filter 中的参数吗?

    map and filter通常可以与列表理解互换 但是reduce并不那么容易被交换map and filter 此外 在某些情况下我仍然更喜欢函数语法 但是 当您需要对参数本身进行操作时 我发现自己正在经历语法体操 最终必须编写整个函数
  • 如何将哈希表添加到多维数组?无法通过成员访问枚举分配值

    我在将哈希表添加到多维数组时遇到问题 我编码如下 Data BIBs BIB BIBName BIBName Standort Standort B cher BuchName BuchName Autor Autor 此代码正在运行并创建
  • Haskell 点运算符

    我尝试在 Haskell 中开发一个简单的平均函数 这似乎有效 lst 1 3 x fromIntegral sum lst y fromIntegral length lst z x y 但是为什么下面的版本不行呢 lst 1 3 x f
  • 什么是{| ... |} 在 JavaScript 中是什么意思? [复制]

    这个问题在这里已经有答案了 通读 javascript 代码库 我遇到了如下代码块 export type RouteReducerProps error Error isResolving boolean isResolved boole

随机推荐

  • Marklogic:导入 csv 时在文档上创建多个 XML 文件。如何获取根文档 URI 路径?

    我是 Marklogic 的新手 我尝试将 100k 记录的 CSV 文件导入到 Marklogic 导入后 我发现它默认导入到文档数据库 另外 我发现对于每条记录 我都会看到数据库中生成的 XML 文件 其中增量编号附加到我在导入时提到的
  • 用 Perl 编写编译器的一部分(用 C++ 编写)

    我正在尝试了解更多有关编译器和编程语言的知识 很遗憾我的大学不提供有关编译器的课程 所以我必须自己做 谢谢互联网 此刻我tryin为了理解和实现我的语言的词法分析器 我需要正则表达式 我习惯很快地编写 Perl 正则表达式脚本 我认为我可以
  • Jquery 成功函数未使用 JSONP 触发

    一直在使用 jQuery 调用我的服务 该服务位于不同的域中 对服务的调用已成功进行 我的调试点被触发 并且返回了正确的响应 我嗅探了流量 我的问题主要是成功和失败回调不会被触发 我读过一些其他帖子 https stackoverflow
  • 访问 VBA 错误“此类对象不支持操作”

    我有这个 vba 代码 但我不明白为什么它返回错误me ID 存储为字符串顺便说一句 Private Sub ID AfterUpdate Dim db As DAO Database Dim rs As DAO Recordset Me
  • 从其他 Xaml 文件绑定到 Usercontrol 内的元素

    谁能告诉我如何绑定到用户控件的元素 我尝试使用数据触发器与 IDataErrorInfo 一起禁用 启用按钮 所以当元素位于同一视图上时我通常会这样做
  • 调用带注释的方法时运行另一个函数

    有没有办法创建自定义或使用现有注释来在调用带注释的方法时触发代码运行 最好 我想使用 Spring 库 例如 SendEmail templateName public void doSomething log info Something
  • 如何更改内容类型 Python

    我想将文件上传到远程设备 如果我查找与wireshark的连接 我会得到这个 POST saveRestore htm cgi HTTP 1 1 Host 10 128 115 214 User Agent Mozilla 5 0 X11
  • Elmah 没有记录 HttpRequestValidationException

    在我的 ASP NET MVC2 应用程序中 Elmah 无法记录任何HttpRequestValidationException 除非您通过远程桌面登录网络服务器并以本地主机身份浏览该网站 例如 如果我输入 39使用我获得的域名从我的电脑
  • 不包含引号但可以包含转义引号的正则表达式

    我正在寻找一个正则表达式来匹配一个字符串 该字符串可以包含除单引号之外的任何内容 但如果引号被转义 则应该匹配 本质上 我想匹配字符串 Tuco and Tuco ABC 但不是 Tuco 看起来下面的内容与引号不匹配 但无法匹配引号 什么
  • 引起原因:java.sql.SQLException:找不到jdbc的合适驱动程序:mysql://localhost:3306/domain

    你好我正在使用以下 hibernate core 4 1 2 Final jar mysql connector 5 1 6 jar 两者都可以在我的项目 lib 目录中找到 我有以下内容休眠 cg xml配置
  • Azure 持久实体,用于存储运行之间的函数应用程序状态 (.net 6)

    我想每分钟运行一个简单的 net 6 c 消耗 azure 函数应用程序 不持久 但我需要记住上次运行的状态 状态由 json 可序列化对象的数组和一些访问令牌字符串组成 所以我创建了一个像这样的持久功能实体 JsonObject Memb
  • 如何向接口添加委托 C#

    我的班上需要有一些代表 我想使用该界面来 提醒 我设置这些委托 How to 我的班级是这样的 public class ClsPictures myInterface Implementing the IProcess interface
  • 如何刷新天气层?

    有谁知道是否有办法刷新 Google 地图 javascript API 中的天气层 为了提供一些背景知识 我们有一个应用程序 它在浏览器中保持打开状态 并每隔几分钟更新地图上的一些信息 我们让用户在地图上打开天气图层 但天气仅在创建图层时
  • 如何在android中测试应用内订阅

    我已成功将应用内购买 api v3 集成到我现有的应用程序中 我还在 google play 中创建了应用程序订阅 并在代码中添加了订阅 ID 在 Google 开发者网站中 我读到要测试应用程序购买 我们需要在 设置 部分添加电子邮件 I
  • 无需连接WiFi即可获取MAC地址

    是否可以在未实际连接的情况下获取 WiFi MAC 地址 假设我有 Android 设备 A 我已经打开了 WiFi 因此我的 Android 设备现在能够检测到附近广播的 WiFi SSID 我附近有一些广播的 WiFi SSID 如下所
  • 遍历范围,将字符串附加到每个范围

    我在 Google 表格 activerange 中选择了一系列单元格 我想迭代该范围内的每个单元格 并在末尾添加一个字符串 该字符串始终相同 并且可以硬编码到函数中 这似乎是一件非常简单的事情 但我已经搞乱了代码一个小时了 但无法发生任何
  • 以有限度数旋转表盘

    All 我想要以特定角度旋转图像 如下图所示 我有旋转代码 但它旋转 360 度 但我只想要特定的度数 并获取表盘上侧的选定数字 下面是我的代码 我的自定义视图工作正常 但性能不佳 import android content Contex
  • 在更新值时扩展 numpy 数组

    我有一个具有形状的 numpy 数组 1 m 和每个条目 n 是0 9之间的整数 我想创建一个具有形状的新矩阵 m 10 其中 除了第 n 列为 1 之外 所有条目均为 0 例如 2 3 1 gt 0 0 1 0 0 0 0 1 0 1 0
  • 更改winform应用程序中所有表单的背景颜色

    我有像这样的基本表单类 它继承自类 public partial class BaseForm Form protected override void OnLoad EventArgs e Color colBackColor Prope
  • 如何在 CIL 中声明值类型:`.class value` 还是只是 `.class`?

    我看过 C struct FooStruct in ILDASM http msdn microsoft com en us library f7dy01k1 aspx 并看到以下内容 ILDASM 此处显示两个不同的声明 一个开始于 cl