gpt4 book ai didi

vb.net - 在运行时动态创建类

转载 作者:行者123 更新时间:2023-12-01 23:01:59 24 4
gpt4 key购买 nike

我有一个这样的方法:(这是一个通用方法,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, o.Value, FieldAttributes.[Private])

Dim getter As MethodBuilder = myType.DefineMethod("get_" + o.Key, MethodAttributes.[Public] Or MethodAttributes.SpecialName Or MethodAttributes.HideBySig, o.Value, 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, MethodAttributes.[Public] Or MethodAttributes.SpecialName Or MethodAttributes.HideBySig, 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

函数的返回值是我的自定义类的类型。

关于vb.net - 在运行时动态创建类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26956824/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com