2013-03-29 13 views
5
Ben otomatik olarak tüm yerel alanları temizler bir arabirim uygulamak istiyoruz

, şimdiye kadar ben:Bir türün varsayılan değerini nasıl yayarsınız?

// Implement IClearable 
dynamicType.AddInterfaceImplementation(typeof(IClearable)); 

MethodBuilder clearnMethodBuilder = dynamicType.DefineMethod("Clear", MethodAttributes.Public | MethodAttributes.Virtual, CallingConventions.Standard); 
ILGenerator clearMethodILGen = clearnMethodBuilder.GetILGenerator(); 

foreach (FieldBuilder localField in fields) 
{ 
    clearMethodILGen.Emit(OpCodes.Ldarg_0); 
    clearMethodILGen.Emit(OpCodes.Ldfld, localField); 
    clearMethodILGen.Emit(OpCodes.??, Profit??); 
} 

clearMethodILGen.Emit(OpCodes.Ret); 

nasıl alanın üzerine varsayılan değeri kaydetmek için son adımı ayarlarım? gibi

+1

ilgi bu mu? http://stackoverflow.com/questions/10400358/how-to-translate-defaultsometype-from-c-sharp-to-cil –

+0

Yup yardımcı olur. Aslında, doğru yöntemin Activator.CreateInstance (T) yaymak olduğunu söyleyebilirim. Bu, varsayılan nesneyi otomatik olarak başlatacağından. – sircodesalot

+0

sınıf veya yapı? Eğer ikincisiyse, 'this = new StructName()' yapabileceksiniz. – leppie

cevap

4

şey:

clearMethodILGen.Emit(OpCodes.Ldfld, localField); 
clearMethodILGen.Emit(OpCodes.Initobj, localField.FieldType); 
İlgili konular