Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Public Sub ctor(ByVal type As TypeBuilder, ByVal FieldRefs As Dictionary(Of Type, FieldBuilder))
- ' Method attributes
- Dim methodAttributes As System.Reflection.MethodAttributes = MethodAttributes.[Public]
- Dim method As MethodBuilder = type.DefineMethod(".ctor", methodAttributes)
- ' Preparing Reflection instances
- Dim ctor1 As ConstructorInfo = GetType(Object).GetConstructor(BindingFlags.Instance Or BindingFlags.[Public] Or BindingFlags.NonPublic, Nothing, Nothing, Nothing)
- ' Setting return type
- method.SetReturnType(GetType(Void))
- ' Adding parameters
- Dim gen As ILGenerator = method.GetILGenerator()
- ' Writing body
- gen.Emit(OpCodes.Ldarg_0)
- gen.Emit(OpCodes.[Call], ctor1)
- 'new up fields
- For Each item In FieldRefs
- AddCtor(type, gen, item.Value, item.Key)
- Next
- gen.Emit(OpCodes.Ret)
- ' finished
- End Sub
- Private Sub AddCtor(ByVal type As TypeBuilder, ByVal gen As ILGenerator, ByVal FieldBuilderRef As FieldBuilder, ByVal TypeToReference As Type)
- Dim TypeCtor = TypeToReference.GetConstructor(BindingFlags.Instance Or BindingFlags.[Public] Or BindingFlags.NonPublic, Nothing, New Type() {}, Nothing)
- gen.Emit(OpCodes.Ldarg_0)
- gen.Emit(OpCodes.Newobj, TypeCtor)
- gen.Emit(OpCodes.Stfld, FieldBuilderRef)
- End Sub
Add Comment
Please, Sign In to add comment