我要问一个听起来很奇怪的问题。
有没有办法在运行时建立一个新类?或至少将新属性添加到现有类。
我的意思是创建一个不存在的类,而不是现有类的实例。以后我可以使用反射来加载和使用此类。
最佳答案
无法向现有类型添加属性,但是您可以在运行时使用Reflection.Emit创建新类型。这是非常复杂的东西,它是这样的:
AssemblyBuilder assemblyBuilder = Thread.GetDomain().DefineDynamicAssembly(
assemblyName , AssemblyBuilderAccess.Run, assemblyAttributes);
ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("ModuleName");
TypeBuilder typeBuilder = moduleBuilder.DefineType(
"MyNamespace.TypeName" , TypeAttributes.Public);
typeBuilder.DefineDefaultConstructor(MethodAttributes.Public);
// Add a method
newMethod = typeBuilder.DefineMethod("MethodName" , MethodAttributes.Public);
ILGenerator ilGen = newMethod.GetILGenerator();
// Create IL code for the method
ilGen.Emit(...);
// ...
// Create the type itself
Type newType = typeBuilder.CreateType();
这段代码只是一个示例。它可能包含错误。
您还可以通过在运行时使用System.CodeDom编译C#源代码来生成类,但是我对此并不了解。