vb.net – 在运行时动态创建类
发布时间:2020-12-17 07:17:16 所属栏目:百科 来源:网络整理
导读:我有一个这样的方法:(这是一个通用的方法,DYNAMIC_CLASS_TYPE将在情况下改为其他情况) Dim res = f.MyMethod(Of DYNAMIC_CLASS_TYPE)("select Id,Name from myTable") 我想基于我的查询列创建一个动态类,然后传递该类而不是DYNAMIC_CLASS_TYPE. 我怎样才能做
我有一个这样的方法:(这是一个通用的方法,DYNAMIC_CLASS_TYPE将在情况下改为其他情况)
Dim res = f.MyMethod(Of DYNAMIC_CLASS_TYPE)("select Id,Name from myTable") 我想基于我的查询列创建一个动态类,然后传递该类而不是DYNAMIC_CLASS_TYPE. 我怎样才能做到这一点? 解决方法
我终于成功了.我的代码如下:
Public Shared Function CreateClass(ByVal className As String,ByVal properties As Dictionary(Of String,Type)) As Type Dim myDomain As AppDomain = AppDomain.CurrentDomain Dim myAsmName As New AssemblyName("MyAssembly") Dim myAssembly As AssemblyBuilder = myDomain.DefineDynamicAssembly(myAsmName,AssemblyBuilderAccess.Run) Dim myModule As ModuleBuilder = myAssembly.DefineDynamicModule("MyModule") Dim myType As TypeBuilder = myModule.DefineType(className,TypeAttributes.Public) myType.DefineDefaultConstructor(MethodAttributes.Public) For Each o In properties Dim prop As PropertyBuilder = myType.DefineProperty(o.Key,PropertyAttributes.HasDefault,o.Value,Nothing) Dim field As FieldBuilder = myType.DefineField("_" + o.Key,GetType(Integer),FieldAttributes.[Private]) Dim getter As MethodBuilder = myType.DefineMethod("get_" + o.Key,MethodAttributes.[Public] Or MethodAttributes.SpecialName Or MethodAttributes.HideBySig,Type.EmptyTypes) Dim getterIL As ILGenerator = getter.GetILGenerator() getterIL.Emit(OpCodes.Ldarg_0) getterIL.Emit(OpCodes.Ldfld,field) getterIL.Emit(OpCodes.Ret) Dim setter As MethodBuilder = myType.DefineMethod("set_" + o.Key,Nothing,New Type() {o.Value}) Dim setterIL As ILGenerator = setter.GetILGenerator() setterIL.Emit(OpCodes.Ldarg_0) setterIL.Emit(OpCodes.Ldarg_1) setterIL.Emit(OpCodes.Stfld,field) setterIL.Emit(OpCodes.Ret) prop.SetGetMethod(getter) prop.SetSetMethod(setter) Next Return myType.CreateType() End Function 函数的返回值是我的自定义类的类型. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |