.


:




:

































 

 

 

 





. TypeBuilder EnumBuilder, .

 

using System;

using System.Reflection;

using System.Reflection.Emit;

 

//

AssemblyName an = new AssemblyName("MyAssembly");

an.Version = new Version("1.0.0.0");

 

// .

AssemblyBuilder ab;

ab = AppDomain.CurrentDomain.DefineDynamicAssembly(an, AssemblyBuilderAccess.Save);

 

//

ModuleBuilder mb = ab.DefineDynamicModule("MyModule", "My.dll");

 

//

EnumBuilder tb = mb.DefineEnum("MyColors", TypeAttributes.Public, typeof(int));

 

//

tb.DefineLiteral("Red", 0);

tb.DefineLiteral("Pink", 1);

tb.DefineLiteral("Green", 2);

 

//

tb.CreateType();

 

//

ab.Save("My2.dll");

 

My2.dll, enum MyColors, Red, Pink Green.

2.2.7.4 "Hello World!"

"Hello World!".

"Hello World!":

 

using System;

using System.Reflection;

using System.Reflection.Emit;

 

namespace DynHelloWorld

{ class Programmer

{ static public Type WriteCode()

{ AssemblyName assemblyName = new AssemblyName();

assemblyName.Name = "HelloWorldAssembly";

 

AssemblyBuilder assemblyBuilder =

AppDomain.CurrentDomain.DefineDynamicAssembly(

assemblyName, AssemblyBuilderAccess.Run);

 

ModuleBuilder moduleBuilder =

assemblyBuilder.DefineDynamicModule("HelloWorldModule");

 

TypeBuilder typeBuilder =

moduleBuilder.DefineType("HelloWorldClass"

, TypeAttributes.Public);

 

MethodBuilder methodBuilder =

typeBuilder.DefineMethod("HelloWorld"

, MethodAttributes.Public

, null, null);

 

ILGenerator il = methodBuilder.GetILGenerator();

 

// .

il.EmitWriteLine("Hello World!");

il.Emit(OpCodes.Ret);

 

return typeBuilder.CreateType();

}

}

 

class Class1

{ static void Main()

{ Type typeCode = Programmer.WriteCode();

object objCode = Activator.CreateInstance(typeCode);

MethodInfo methodInfo = typeCode.GetMethod("HelloWorld");

 

methodInfo.Invoke(objCode, null);

 

Console.ReadLine();

}

}

}

 

- Programmer WriteCode(). HelloWorldClass, HelloWorldModule, HelloWorldAssembly.

- -Buider'o, System. Reflection. Emit, . ( TypeAttributes. Public MethodAttributes. Public).

, . IL: .

, , , .

, . , AssemblyResolve AppDomain. - . ( ), .





:


: 2016-11-24; !; : 345 |


:

:

.
==> ...

1642 - | 1621 -


© 2015-2024 lektsii.org - -

: 0.011 .