using System;
using System.CodeDom.Compiler;
using Microsoft.CSharp;
using System.Reflection;
using System.Configuration;
namespace ConsoleApplication1
{
class Program
{
static void Main(
string[] args)
{
//在App.Config中读取类的定义字符串
string ClassDefined = ConfigurationManager.AppSettings[
"ClassDefined"];
//创建代码编译器
CSharpCodeProvider codeProvider =
new CSharpCodeProvider();
//设置编译参数
CompilerParameters paras =
new CompilerParameters();
//设置在内存中生成输出。
paras.GenerateInMemory =
true;
//编译代码
CompilerResults result =
codeProvider.CompileAssemblyFromSource(paras, ClassDefined);
//获取编译后的程序集
Assembly assembly =
result.CompiledAssembly;
//获取反射出来的对象
Object dynamicClass = assembly.CreateInstance(
"CSharp.Dynamic.Employee");
//获取员工实例的类型
Type employee =
dynamicClass.GetType();
//设置属性
employee.GetProperty(
"ID").SetValue(dynamicClass,
1,
null);
employee.GetProperty("Name").SetValue(dynamicClass,
"李林峰",
null);
employee.GetProperty("Department").SetValue(dynamicClass,
"技术部",
null);
employee.GetProperty("Position").SetValue(dynamicClass,
"程序员",
null);
//读取属性
string Name = employee.GetProperty(
"Name").GetValue(dynamicClass,
null).ToString();
string Department = employee.GetProperty(
"Department").GetValue(dynamicClass,
null).ToString();
string Position = employee.GetProperty(
"Position").GetValue(dynamicClass,
null).ToString();
//执行方法
string ParmAndID = employee.GetMethod(
"Method").Invoke(dynamicClass,
new object[] {
"员工编号:" }).ToString();
//输出
Console.WriteLine(Name);
Console.WriteLine(Department);
Console.WriteLine(Position);
Console.WriteLine(ParmAndID);
Console.Read();
}
}
}
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="ClassDefined" value="namespace CSharp.Dynamic{
public class Employee{
public int ID { get; set; }
public string Name { get; set; }
public string Department { get; set; }
public string Position { get; set; }
public string Method(string parm){return parm+this.ID.ToString();}
}}"/>
</appSettings>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
转载于:https://www.cnblogs.com/hongjiumu/archive/2012/08/22/2651214.html