zoukankan      html  css  js  c++  java
  • 通过类名字符串调用类成员和实例化

    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>
  • 相关阅读:
    数据表管理admin
    HDU 5057
    HDU 5056
    HDU 6035(树形dp)
    CodeForces 586D
    Codeforces 940D
    CodeForces 820C
    TOJ4114(活用树状数组)
    2017CCPC中南地区赛 H题(最长路)
    CodeForces 544C (Writing Code)(dp,完全背包)
  • 原文地址:https://www.cnblogs.com/hongjiumu/p/2651214.html
Copyright © 2011-2022 走看看