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>
  • 相关阅读:
    Linux下Subversion的使用
    python3之HTML、CSS学习
    Python成长之路 常用模块与正则表达式
    Css3 列表布局 两列或者多列布局整理
    .net 通过代码控制GridView显示列
    .net 创建一个页面级全局datatable的方法
    .net 将分页展示的GridView的全部数据 导出excel
    .net 如何判断dataset是否为空
    sql 全表结构备份
    sql 把一个表中的某一列赋值到另一个表中的某一列
  • 原文地址:https://www.cnblogs.com/hongjiumu/p/2651214.html
Copyright © 2011-2022 走看看