C#反射(二)
长时间没有回顾反射知识了,今天就讲解一下反射的一般第二个用法。
二.对方法,属性等的反射
首先需要写一个测试类,生成.exe或.dll文件。
class Test
{ public Test()//普通构造方法
{ }
public string writeString(string s)//有参方法
{ return "welcome:" + s; }
public static string staticString(string s)//静态方法
{ return "welcome:" + s; }
public string writeStringNO()//无参方法
{ return "welcome:chen" ; }}
找出.exe文件,为了方便寻找,可以暂时复制在桌面上。
常规调用测试类方法,采用创建一个对象并实例化来引用方法,比如:
Test t=new Test();
t.writeString();
反射调用(两个项目之间调用):
再创建一个ConsoleApplication2 控制台程序。
先引用命名空间 using System.Reflection;
ConsoleApplication2:
//使用反射
static void Main(string[] args)
{
Assembly ass;//程序集
Type ty;//相当于类
Object ob;//相当于对象
string path = @"C:\Users\Shuang\Desktop\ConsoleApplication1.exe";//程序集路径
ass = Assembly.LoadFile(path);//加载程序集
ty = ass.GetType("ConsoleApplication1.Test");//获取Test类名;格式:"命名空间.类名"
MethodInfo meth = ty.GetMethod("writeString");//获取方法,格式:"方法名" 有参数
MethodInfo meth1 = ty.GetMethod("writeStringNO");//获取方法,格式:"方法名" 无参数
MethodInfo meth2 = ty.GetMethod("staticString");//获取方法,格式:"方法名" 静态
ob = ass.CreateInstance("ConsoleApplication1.Test");//创建一个对象, 格式:"命名空间.类名"
string[] canshu = { "chen1"};//参数数组
string res = (string)meth.Invoke(ob,canshu);//获取结果;格式:对象,参数(参数为object数组) 有参数
string res1 = (string)meth1.Invoke(ob, null);//获取结果;格式:对象,参数(参数为object数组) 无参数
string res2 = (string)meth2.Invoke(null, canshu);///获取结果;格式:对象,参数(参数为object数组) 静态
Console.Write("有参:"+res+"\n");
Console.Write("无参:" + res1 + "\n");
Console.Write("静态:" + res2);
Console.ReadLine();
}
C#反射(二)的更多相关文章
- java反射(二)--反射应用案例
一.反射实例化对象 经过一系列的分析之后发现虽然可以获取Class类的实例化对象,但是依然觉得这个对象的获取意义不是很大,因此可以通过以下几个案例去理解反射的核心意义--反射实例化对象:获取Class ...
- C#反射(二) 【转】
如果没有看<C#反射(一)>.建议先看<C#反射(一)>再看这一篇.上一篇文章发表,有人评论我所写的东西比较基础.其实我也知道我也只不过是在写最基础的语法而已,之所以写它是因为 ...
- 深入分析Java反射(二)-数组和枚举
前提 Java反射的API在JavaSE1.7的时候已经基本完善,但是本文编写的时候使用的是Oracle JDK11,因为JDK11对于sun包下的源码也上传了,可以直接通过IDE查看对应的源码和进行 ...
- JAVA中反射机制二
声明:如需转载请说明地址来源:http://www.cnblogs.com/pony1223 反射二 利用反射创建对象 1.利用反射创建对象,首先我们创建一个类,类里面,我们知道构造函数有默认的构造函 ...
- C# 反射之调用方法谈
反射的定义 反射提供了描述程序集.模块和类型的对象(Type 类型). 可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性. 如果代码中使用了特性 ...
- java反射快速入门(一)
本文会从以下几个方面讲起 ① 反射的简单解释 ② java反射的API接口 及 demo ③ 反射的优缺点.应用场景 一.什么是反射? java反射:在程序运行中动态获取类的信息,及动态调用对象的方法 ...
- 反射(4)反射性能问题:直接调用vs反射调用
很多人都说使用反射会有性能问题,那到底会比直接调用慢多少呢,下面就来测试一下. 直接调用vs反射调用 下面就来写个demo来验证下直接调用和反射调用的性能差异,代码如下: namespace Cons ...
- 已看1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架、多线程(并发编程)、I/O(NIO)、Socket、JDBC、XML、反射等。[泛型]\
1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架.多线程(并发编程).I/O(NIO).Socket.JDBC.XML.反射等.[泛型]\1* ...
- Java反射Reflect的使用详解
目录 一. 什么是反射 二. 反射的基础Class 2.1 Class类概述 2.2 Class类对象获取的三种方式 三. 反射-构造函数 3.1 getDeclaredConstructor(Cla ...
随机推荐
- Springmvc与Struts区别?
在一个技术群里看到机器人解释的二者区别,在此Mark下. 一.框架机制 spring mvc 和 struts2的加载机制不同:spring mvc的入口是servlet,而struts2是filte ...
- 图解JVM内存区域划分
图解JVM类加载机制和双亲委派模型一文中讲述了 Java 类加载的过程,它包含加载.验证.准备.解析.初始化.使用.卸载这 7 个步骤.在准备阶段,JVM会将类加载到内存中,为类变量分配内存并赋予初值 ...
- Netty为什么不直接用AtomicXXX,而要用AtomicXXXFieldUpdater去更新变量呢?
更多技术分享可关注我 前言 如果仔细阅读过Netty的线程调度模型的源码,或者NIO线程对象及其线程池的创建源码,那么肯定会遇到类似“AtomicIntegerFieldUpdater”的身影,不禁想 ...
- 学习方法,学习方式By:ラピスラズリ(Dawn)20200407
原创,转载请注明,谢谢!
- Java实现tif/tiff/bmp图片转换png图片
package org.analysisitem20181016.test; import java.io.File; import java.io.FileOutputStream; import ...
- Python常用模块之configparser
ConfigParser简介 ConfigParser 是用来读取配置文件的包.配置文件的格式如下:中括号“[ ]”内包含的为section.section 下面为类似于key-value 的配置内容 ...
- 为何关键字static在面试中频频被问?
关键字static的神奇妙用在今天的学习中,我了解到关键字static的作用,下面我来给大家分享一下.①static 修饰局部变量只改变了变量的生命周期,让静态局部变量出了作用域依然存在,到程序结束生 ...
- 基于Quartz编写一个可复用的分布式调度任务管理WebUI组件
前提 创业小团队,无论选择任何方案,都优先考虑节省成本.关于分布式定时调度框架,成熟的候选方案有XXL-JOB.Easy Scheduler.Light Task Scheduler和Elastic ...
- vue中的$router 和 $route的区别
最近在学习vue的单页面应用开发,需要vue全家桶,其中用到了VueRouter,在路由的设置和跳转中遇到了两个对象$router 和 $route ,有些傻傻分不清,后来自己结合网上的博客和自己本地 ...
- protobuf总结
1.protobuf是什么? protobuf(protocol buffers)是一种语言中立,平台无关,可扩展的序列化数据的格式,可以用于通信协议,数据存储等. protobuf 相比于xml,j ...