任何人都可以告訴我如何使用反射創建一個MustOverride
屬性?使用反射創建MustOverride屬性?
1
A
回答
3
你的意思是Reflection.Emit
?如果是這樣,您使用TypeBuilder.DefineMethod
,與MethodAttributes.Abstract
。
下面是一個例子;在Bar.Method
是abstract
; Bar2.Method
覆蓋它。
AssemblyName an = new AssemblyName("Foo");
var asm = AppDomain.CurrentDomain.DefineDynamicAssembly(an, AssemblyBuilderAccess.Run);
var module = asm.DefineDynamicModule("Foo");
var type = module.DefineType("Bar", TypeAttributes.Abstract | TypeAttributes.Class | TypeAttributes.AnsiClass);
var method = type.DefineMethod("Method", MethodAttributes.Abstract | MethodAttributes.Public | MethodAttributes.Virtual,
CallingConventions.HasThis, typeof(int), Type.EmptyTypes);
var final = type.CreateType();
type = module.DefineType("Bar2", TypeAttributes.Sealed | TypeAttributes.Class | TypeAttributes.AnsiClass, final);
var method2 = type.DefineMethod("Bar", MethodAttributes.Public | MethodAttributes.Virtual,
CallingConventions.HasThis, typeof(int), Type.EmptyTypes);
var il = method2.GetILGenerator();
il.Emit(OpCodes.Ldc_I4_4);
il.Emit(OpCodes.Ret);
type.DefineMethodOverride(method2, method);
var concrete = type.CreateType();
object obj = Activator.CreateInstance(concrete);
int result = (int) concrete.GetMethod("Bar").Invoke(obj, null);
+0
啊,是的,這更可能是問題的含義。我會留下我的回答,以防萬一它變得有用,但我認爲你有這個:) – 2009-04-10 19:47:39
0
你的意思是CodeDOM?反射用於讀取現有的代碼,而不是創建新的代碼。
如果做意味着CodeDOM的,我相信,你只需要創建CodeMemberProperty
並設置其屬性Attributes
包括MemberAttributes.Abstract
。
相關問題
- 1. 使用屬性反射測試屬性
- 2. 使用反射來調用屬性
- 3. Javascript屬性反射
- 4. 使用反射設置屬性值
- 5. C#中使用反射屬性?
- 6. 使用反射來解決Linqed屬性
- 7. 使用反射選擇一些屬性
- 8. 使用反射獲取屬性
- 9. 使用反射c獲取動態創建的ASPxTextBox的Text屬性#
- 10. C#自定義屬性屬性反射
- 11. 反射,屬性和屬性選擇
- 12. 如何使用反射來創建一個「反射機器」
- 13. 使用反射來得到一個屬性的屬性
- 14. 使用反射從元數據類獲取屬性屬性
- 15. 創建反射Opengl
- 16. 使用Java反射創建對象
- 17. 如何創建使用反射
- 18. 使用反射創建HttpPostedFile的實例
- 19. 接口,屬性和反射
- 20. C#反射索引屬性
- 21. Asp.Net反射計數屬性
- 22. 反射物體的屬性
- 23. EntityTypeConfiguration屬性方法反射
- 24. 反射和複雜屬性
- 25. 使用CSS3創建屬性
- 26. 創建/使用EpiServer屬性
- 27. 用反射改變只讀屬性
- 28. 創建使用反射來創建對象
- 29. 使用geoshape屬性映射創建索引
- 30. 創建通過反射
我要麼不明白這個問題,要麼這個問題沒有意義。 – Brian 2009-04-10 19:42:25