C# 给一个类动态新增字段
在C#中,类的字段是在编译时确定的,无法动态新增。但是,可以通过使用反射来动态地向类中添加字段。下面是一个示例代码:
using System;
using System.Reflection;
using System.Reflection.Emit;
public class MyClass
{
public int MyField1 { get; set; }
}
public class Program
{
public static void Main(string[] args)
{
// 创建一个动态程序集
AssemblyName assemblyName = new AssemblyName("DynamicAssembly");
AssemblyBuilder assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
// 创建一个动态模块
ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("DynamicModule");
// 创建一个动态类型
TypeBuilder typeBuilder = moduleBuilder.DefineType("DynamicClass", TypeAttributes.Public);
// 添加一个字段
FieldBuilder fieldBuilder = typeBuilder.DefineField("MyField2", typeof(int), FieldAttributes.Public);
// 创建类型并获取类型的实例
Type dynamicType = typeBuilder.CreateType();
object dynamicObject = Activator.CreateInstance(dynamicType);
// 设置字段的值
dynamicType.GetField("MyField2").SetValue(dynamicObject, 10);
// 输出字段的值
Console.WriteLine(dynamicType.GetField("MyField2").GetValue(dynamicObject));
}
}
在上面的示例中,我们使用反射和动态模块来创建一个新的类型,并向该类型中添加一个字段。然后,我们通过反射设置和获取该字段的值。输出结果将是10,表示成功地向类中动态添加了一个字段
原文地址: https://www.cveoy.top/t/topic/ii2z 著作权归作者所有。请勿转载和采集!