2011-03-14 29 views

回答

4

modopt仅用于IL。 .NET语言编译器的工作是解释并生成它。 ECMA-335中,分区II,章7.1.1提到它:

定制改性剂,使用modreq (“所需的改性剂”)和MODOPT (“任意的改性剂”),是类似于 自定义属性(定义§21),但 修饰符是签名 的一部分,而不是附加到 声明。

[理由: 必需和可选的修饰符之间的区别是 比CLI 是处理元数据,通常 编译器和程序分析器等工具很重要。 A 所需的修饰符表示有 是修改过的 项的特殊语义,不应该被忽略,而 可选修饰符可以简单地被 忽略。

例如,在 const限定符C编程语言可以 因为有 方法的调用者有一个可选的修饰符 建模的const限定参数不必 把它的任何特殊方式。在 另一方面,在C++中复制构建的参数应为 ,因为它是调用者,因此它是 进行复制的标记,具有所需的自定义 属性。 end理由]

换句话说,它允许将元数据添加到对CLR无关紧要但对语言有用的声明中。 C++/CLI编译器特别使用它。必须如此,.NET没有关于例如const关键字的等价物。

2

我认为modopt不是任何.NET语言的实际关键字(即,您不能在C#中编写modopt)。它是由C++/CLI编译器生成的自定义修饰符,它最早出现在.NET 2.0中,因此我认为modopt已经同时添加到.NET运行时。