C#——反射动态创建类的实例
“反射”其实就是利用程序集的元数据信息。 反射可以有很多方法,编写程序时请先导入 System.Reflection 命名空间。
若要反射当前项目中的类(即当前项目已经引用它了),可以使用下面的写法。这种情况是我们项目中经常遇到的,主要作用就是解耦,便于项目后期拓展。
首先在配置文件中添加appsetting节点:
<appSettings>
<add key="AssemblyPath" value="ConsoleApp11"/>
<add key="NameSpace" value="ConsoleApp11"/>
<add key="ClassName" value="Student"/>
</appSettings>
核心代码:
private static readonly string assemblyName = ConfigurationManager.AppSettings["AssemblyPath"];//程序集
private static readonly string nameSpace = ConfigurationManager.AppSettings["NameSpace"];//命名空间
private static readonly string className = ConfigurationManager.AppSettings["ClassName"];//类名 public static object CreateInstance(string assemblyName, string nameSpace, string className)
{
try
{
string fullName = nameSpace + "." + className;//命名空间.类型名
object ect = Assembly.Load(assemblyName).CreateInstance(fullName);//加载程序集,创建程序集里面的 命名空间.类型名 实例
return ect;//类型转换并返回
}
catch (Exception ex) { Console.WriteLine(ex.Message + "===" + ex.StackTrace); return false; }
}
控制台调用:
static void Main(string[] args)
{
IPerson ip = CreateInstance(assemblyName, nameSpace, className) as IPerson;
ip.Say();
Console.ReadKey();
}
其中Student类是继承于接口IPerson,拥有Say()的方法:
public interface IPerson { void Say(); }
public class Student : IPerson { public void Say() { Console.WriteLine("我是学生...."); } }
注释:利用接口和反射的方法某种程度达到了解耦的效果。假如有许多类:Teacher、Child等都继承于IPerson接口,此次项目结束时可能我们只需要Student类,不需要实现其他类的方法。但是一旦下次做更改的时候,就可以通过配置文件进行更改,快捷方便。
C#——反射动态创建类的实例的更多相关文章
- OC 反射-->动态创建类
系统方法 NSLog(@"%s", __func__); //打印出类的方法名称,如: //打印结果:2018-02-22 10:52:15.394575+0800 DemoRun ...
- c# 利用反射 从json字符串 动态创建类的实例 并动态为实例成员赋值
转自 http://hi.baidu.com/wjinbd/item/c54d43d998beb33be3108fdd 1 创建自己要用的类 class stu { string _name; int ...
- C# Activator.CreateInstance 动态创建类的实例(二)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- C# Activator.CreateInstance 动态创建类的实例(一)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- C#反射动态创建实例并调用方法
在.Net 中,程序集(Assembly)中保存了元数据(MetaData)信息,因此就可以通过分析元数据来获取程序集中的内容,比如类,方法,属性等,这大大方便了在运行时去动态创建实例. MSDN解释 ...
- C# 利用反射根据类名创建类的实例对象
“反射”其实就是利用程序集的元数据信息. 反射可以有很多方法,编写程序时请先导入 System.Reflection 命名空间. 1.假设你要反射一个 DLL 中的类,并且没有引用它(即未知的类型): ...
- C++反射机制:可变参数模板实现C++反射(使用C++11的新特性--可变模版参数,只根据类的名字(字符串)创建类的实例。在Nebula高性能网络框架中大量应用)
1. 概要 本文描述一个通过C++可变参数模板实现C++反射机制的方法.该方法非常实用,在Nebula高性能网络框架中大量应用,实现了非常强大的动态加载动态创建功能.Nebula框架在码云的仓库地 ...
- 【转】C# 利用反射根据类名创建类的实例对象
原文地址:https://www.cnblogs.com/feiyuhuo/p/5793606.html “反射”其实就是利用程序集的元数据信息. 反射可以有很多方法,编写程序时请先导入 System ...
- Python中type()详解:动态创建类
众所周知: type()函数可以查看变量的类型: 先看一个简单的列子来看一下type查看变量类型 class Animal(): pass a=Animal() print(type(a)) prin ...
随机推荐
- php oop-1
<?php //类的定义以 class 关键字开始 后面跟 类的名称 通常第一个字母大写 以 大括号开始 和结束 //类的属性和方法 前面都要加关键字 例如public class NbaPla ...
- Jsp中EL表达式的使用
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 1.什么是EL EL是JSP表达式语言,全称是ExpressionLang ...
- POJ_1679_The Unique MST(次小生成树模板)
The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 23942 Accepted: 8492 D ...
- j2se回想
执行Java程序. Java程序有两种方式一种是jar包.一种是class. 执行jar,Java -jar XXX.jar执行的时候,Java.exe调用GetMainClassName函数,该函数 ...
- C++中的继承与虚函数各种概念
虚继承与一般继承 虚继承和一般的继承不同,一般的继承,在目前大多数的C++编译器实现的对象模型中,派生类对象会直接包含基类对象的字段.而虚继承的情况,派生类对象不会直接包含基类对象的字段,而是通过一个 ...
- 怎么让frameset出现整体滚动条
a.html<!DOCTYPE html> <html> <head> <title></title> </head> < ...
- Java多线程相关的常用接口
Runnable 是一个接口,里面只声明了一个方法run();返回值为void所以无法拿到执行完的结果.只能通过共享变量或者线程通信来搞定.Future就是对具体的Runable或者Callable任 ...
- java调用restful接口的方法
Restful接口的调用,前端一般使用ajax调用,后端可以使用的方法如下: 1.HttpURLConnection实现 2.HttpClient实现 3.Spring的RestTemplate
- 使用centos 5.x 64位系统安装astgo 2014 v7.3教程(含全套安装文件)
版本特色: 全自动安装 安装过程中不用频繁输入yes或回车 自带完整号码归属地数据库 自带触屏版WAP ·首先确定你需要使用astgo 2014 7.0还是7.3: astgo 2014 v 7.0 ...
- Input 内提示填写内容
输入框内提示默认内容,用户的点击后提示内容消失,如果填写内容为空,失去焦点后自动显示提示内容 <input type="text" value="搜索" ...