Aracılığıyla paylaş


Sistem. Düşünceler. Emit.TypeBuilder sınıfı

Bu makale, bu API'nin başvuru belgelerine ek açıklamalar sağlar.

TypeBuilder , çalışma zamanında dinamik sınıfların oluşturulmasını denetlemek için kullanılan kök sınıftır. Sınıfları tanımlamak, yöntemler ve alanlar eklemek ve bir modülün içinde sınıfı oluşturmak için kullanılan bir dizi yordam sağlar. Bir nesneyi döndüren yöntemini çağırarak ModuleBuilder.DefineType dinamik modülden yeni TypeBuilder bir TypeBuilder modül oluşturulabilir.

Düşünceler yayma, türleri tanımlamak için aşağıdaki seçenekleri sağlar:

  • Verilen ada sahip bir sınıf veya arabirim tanımlayın.
  • Verilen ad ve özniteliklerle bir sınıf veya arabirim tanımlayın.
  • Verilen ada, özniteliklere ve temel sınıfa sahip bir sınıf tanımlayın.
  • Verilen ada, özniteliklere, temel sınıfa ve sınıfın uyguladığı arabirim kümesine sahip bir sınıf tanımlayın.
  • Verilen ada, özniteliklere, temel sınıfa ve paketleme boyutuna sahip bir sınıf tanımlayın.
  • Verilen ada, özniteliklere, temel sınıfa ve bir bütün olarak sınıf boyutuna sahip bir sınıf tanımlayın.
  • Verilen ada, özniteliklere, temel sınıfa, paketleme boyutuna ve bir bütün olarak sınıf boyutuna sahip bir sınıf tanımlayın.

Bir nesne tarafından TypeBuilder temsil edilen tamamlanmamış bir tür için dizi türü, işaretçi türü veya byref türü oluşturmak için sırasıyla yöntemini, MakePointerType yöntemini veya MakeByRefType yöntemini kullanınMakeArrayType.

Bir tür kullanılmadan TypeBuilder.CreateType önce yöntemi çağrılmalıdır. CreateType , türün oluşturulmasını tamamlar. CreateType çağrısının ardından çağıran yöntemini kullanarak Activator.CreateInstance türün örneğini oluşturabilir ve yöntemini kullanarak türün üyelerini Type.InvokeMember çağırabilir. CreateType çağrıldıktan sonra bir türün uygulamasını değiştiren yöntemleri çağırmak bir hatadır. Örneğin, çağıran bir türe yeni üyeler eklemeye çalışırsa ortak dil çalışma zamanı bir özel durum oluşturur.

Bir sınıf başlatıcı yöntemi kullanılarak TypeBuilder.DefineTypeInitializer oluşturulur. DefineTypeInitializer bir ConstructorBuilder nesne döndürür.

İç içe türler yöntemlerden biri çağrılarak TypeBuilder.DefineNestedType tanımlanır.

Özellikler

sınıfı, TypeBuilder oluşturulacak türün özelliklerini daha fazla belirtmek için numaralandırmayı kullanır TypeAttributes :

  • Arabirimler ve TypeAttributes.Abstract öznitelikleri kullanılarak TypeAttributes.Interface belirtilir.
  • Somut sınıflar (genişletilemeyen sınıflar) özniteliği kullanılarak TypeAttributes.Sealed belirtilir.
  • Çeşitli öznitelikler tür görünürlüğünü belirler. Numaralandırmanın açıklamasına TypeAttributes bakın.
  • Belirtilirse TypeAttributes.SequentialLayout , sınıf yükleyicisi alanları meta verilerden okunma sırasına göre düzenler. Sınıf yükleyicisi belirtilen paketleme boyutunu dikkate alır, ancak belirtilen alan uzaklıklarını yoksayar. Meta veriler, alan tanımlarının yayıldığı sırayı korur. Birleştirme işleminde bile meta veriler alan tanımlarını yeniden sıralamaz. Yükleyici, belirtilen alan uzaklıklarını yalnızca belirtilirse TypeAttributes.ExplicitLayout kabul eder.

Bilinen sorunlar

  • Düşünceler ion yayılım, bir arabirimi uygulayan soyut olmayan bir sınıfın arabirimde bildirilen tüm yöntemleri uygulayıp uygulamadığını doğrulamaz. Ancak, sınıf bir arabirimde bildirilen tüm yöntemleri uygulamazsa, çalışma zamanı sınıfını yüklemez.
  • öğesinden Typetüretilmiş olsa TypeBuilder daType, sınıfında tanımlanan soyut yöntemlerden bazıları sınıfında tam olarak uygulanmazTypeBuilder. Bu TypeBuilder yöntemlere yapılan çağrılar bir NotSupportedException özel durum oluşturur. İstenen işlevsellik, veya Assembly.GetType kullanılarak Type.GetType oluşturulan tür alınıp alınan türe yansıtılarak elde edilebilir.