2011-03-14 54 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運行時。