系統。反思。Emit.TypeBuilder 類別

本文提供此 API 參考文件的補充備註。

TypeBuilder 是用來控制運行時間中動態類別建立的根類別。 它提供一組例程,用來定義類別、新增方法和字段,並在模組內建立類別。 您可以呼叫 ModuleBuilder.DefineType 傳回 TypeBuilder 物件的 方法,從動態模組建立新的 TypeBuilder

反思 ion 發出提供下列選項來定義類型:

  • 使用指定的名稱定義類別或介面。
  • 使用指定的名稱和屬性定義類別或介面。
  • 使用指定的名稱、屬性和基類來定義類別。
  • 使用指定的名稱、屬性、基類和類別實作的介面集來定義類別。
  • 使用指定的名稱、屬性、基類和封裝大小來定義類別。
  • 使用指定的名稱、屬性、基類和整個類別大小來定義類別。
  • 使用指定的名稱、屬性、基類、封裝大小和整體類別大小來定義類別。

若要為物件表示 TypeBuilder 的不完整類型建立數位類型、指標類型或 byref 類型,請分別使用 MakeArrayType 方法、 MakePointerType 方法或 MakeByRefType 方法。

使用類型之前, TypeBuilder.CreateType 必須先呼叫 方法。 CreateType 會完成類型的建立。 在呼叫 CreateType 之後,呼叫端可以使用 方法具現化類型 Activator.CreateInstance ,並使用 方法叫用 Type.InvokeMember 型別的成員。 叫用方法是在呼叫 CreateType 之後變更類型實作的錯誤。 例如,如果呼叫端嘗試將新成員新增至類型,Common Language Runtime 會擲回例外狀況。

類別初始化運算式是使用 TypeBuilder.DefineTypeInitializer 方法建立的。 DefineTypeInitializerConstructorBuilder 傳回 物件。

巢狀類型是藉由呼叫其中 TypeBuilder.DefineNestedType 一種方法來定義。

屬性

類別 TypeBuilderTypeAttributes 使用 列舉,進一步指定要建立的類型特性:

已知問題

  • 反思 ion 發出不會驗證實作介面的非抽象類是否已實作介面中宣告的所有方法。 不過,如果類別未實作介面中宣告的所有方法,運行時間就不會載入 類別。
  • 雖然 TypeBuilder 衍生自 Type,但 類別中 Type 定義的一些抽象方法並未完全實作於 TypeBuilder 類別中。 呼叫這些 TypeBuilder 方法會擲回 NotSupportedException 例外狀況。 您可以使用 或 Assembly.GetType 來擷取所建立的類型Type.GetType,並反映所擷取的類型,以取得所需的功能。