2010-11-18 19 views
8

Xin lỗi nếu tôi thiếu điều gì đó hiển nhiên, nhưng khi tôi tạo một kiểu mới với Reflection.Emit, làm cách nào để chỉ định không gian tên cần phải có trong đó?Cách chỉ định Không gian tên cho một loại được tạo thông qua Reflection.Emit?

tức ..

AssemblyName assemblyName = new AssemblyName(); 
assemblyName.Name = "TestDynamic"; 

AssemblyBuilder assemblyBuilder = 
    AppDomain.CurrentDomain.DefineDynamicAssembly(
     assemblyName, 
     AssemblyBuilderAccess.Save); 

ModuleBuilder moduleBuilder =  
    AssemblyBuilder.DefineDynamicModule("TestDynamic", "TestDynamic.dll"); 

TypeBuilder myTestInterface = 
    moduleBuilder.DefineType("MyTestInterface", 
    TypeAttributes.Public | TypeAttributes.Interface, typeof(object)); 

Làm thế nào để cung cấp cho một không gian tên cho ?

Trả lời

11

Xác định nó nơi bạn xác định các loại:

moduleBuilder.DefineType("MyNamespace.MyTestInterface", 
       TypeAttributes.Public | TypeAttributes.Interface, 
       typeof(object)); 
+0

D'oh! Tôi biết nó phải là một cái gì đó hiển nhiên. Cảm ơn bạn đời. –

0

Chỉ cần đặt nó trước khi typename "ngắn". "Namespace.Subnamespace.Type"

+0

Điều đó không đúng, các kiểu được xác định theo phạm vi (assembly, module, hoặc kiểu khác nếu kiểu được lồng vào), namespace và name. –

+0

tôi quên thêm assembly. vẫn còn, CLR không biết bất cứ điều gì về không gian tên xa như tôi biết. – Botz3000

+0

ECMA-335 chỉ định rằng các loại được xác định bằng tên đầy đủ của chúng trong phạm vi các hội đồng tương ứng của chúng. Tên đầy đủ của họ được xây dựng từ siêu dữ liệu của các loại bao gồm không gian tên và tên, được lưu trữ dưới dạng hai thực thể riêng biệt. Điều đó hơi khác một chút so với việc không biết gì cả. Trong trường hợp của SRE, việc thực hiện sẽ chỉ đơn giản là phân chia tên đầy đủ cho bạn dựa trên quy tắc đơn giản được mô tả trong ECMA 335 (chia tại dấu chấm cuối cùng). –

Các vấn đề liên quan