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();

}

 

 

时间: 2024-11-10 22:53:53

C#反射(二)的相关文章

入门反射(二)

原文:入门反射(二) 这篇来看一下反射的使用吧!举个例子! 举例子,肯定需要一个类啦,先建一个学生例子类: public class Student { public int Status; public int Id { get; set; } public string Name { get; set; } public string Sex { get; set; } public void Show() { Console.WriteLine("姓名:{0}", Name);

元数据与反射(二)

1.反射程序集 获取Assmbly对象有以下方法: (1)Assmbly.Load("程序集文件名称") Assembly assembly = Assembly.Load("类库Demo"); (2)Assmbly.LoadFrom("程序集文件名") Assembly assembly = Assembly.LoadFrom("类库Demo.dll"); 上述两个方法的区别就在于Load只需要提供文件名不加后缀的信息即可.

C#反射(二) 【转】

如果没有看<C#反射(一)>.建议先看<C#反射(一)>再看这一篇.上一篇文章发表,有人评论我所写的东西比较基础.其实我也知道我也只不过是在写最基础的语法而已,之所以写它是因为自己学编程学了一两年之后才接触到反射,相信会有很多人跟我有过同样的经历.概其原因,书店里几乎90%的书籍都不谈反射.还有,曾经在百度.goole搜索过反射,但也很难找到自己喜欢的答案.希望我所写的东西能为那些初学编程的新手有所帮助. 我不想在这里过多的描述反射的概念.我还是用我自己觉得最简单.最直接的语言来描

跟我学Java反射——二步曲

上一篇文章我们已经将反射的基本知识和class类以及类的加载器进行了介绍,在上一篇我们还学习了四种得到Class类对象的方式,但是有了class对象我们能做些什么呢,学习完这篇文章,就可以得到答案了. 获取类的完整结构 这篇文章我们主要通过demo来学习,我先将demo需要用到的代码进行简单介绍. 一个接口MyInterface代码: package com.tgb.reflect.common; import java.io.Serializable; public interface MyI

Java反射(二):检测类的修饰符和类型

一个类可被若干个能影响其运行时行为的修饰符声明: 访问修饰符:public,protected,private 需要重载的修饰符:abstract 限制为只有一个实例的:static 阻止值修改:final 强制严格浮点行为:strictfp 注解 不是所有的修饰符能用在所有的类上.比如final不能修饰接口,枚举不能是abstract.java.lang.reflect.Modifier包含了所有可能修饰符的声明,它也包含用来编码由Class.getModifiers()返回的修饰符集合的方法

java反射快速入门(一)

本文会从以下几个方面讲起 ① 反射的简单解释 ② java反射的API接口 及 demo ③ 反射的优缺点.应用场景 一.什么是反射? java反射:在程序运行中动态获取类的信息,及动态调用对象的方法,这就是java反射 二.java反射的API接口 常用API接口规律 getXX() : 获取类本身 及父类的public属性.方法等 getDeclaredXX() :  获取类本身的所有私有.保护属性.方法等 getDeclaredXX(String name) : 获取类本身的指定name的

C#反射的实现

一,什么是反射? 1,System.Reflection 命名空间中的类与 System.Type 使你能够获取有关加载的程序集和其中定义的类型的信息,如类.接口和值类型. 可以使用反射在运行时创建.调用和访问类型实例. 2,System.Type 类对于反射起着核心的作用. 当反射请求加载的类型时,公共语言运行时将为它创建一个 Type. 您可以使用 Type 对象的方法.字段.属性和嵌套类来查找有关该类型的所有信息. 3,动态的创建类型的实例,将类型邦定到现有对象,或从现有对象中获取类型 (

1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架、多线程(并发编程)、I/O(NIO)、Socket、JDBC、XML、反射等。[泛型]\

. 进程和线程之间有什么不同? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用.而线程是在进程中执行的一个任务.Java运行环境是一个包含了不同的类和程序的单一进程.线程可以被称为轻量级进程.线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源. 2. 多线程编程的好处是什么? 在多线程程序中,多个线程被并发的执行以提高程序的效率,CPU不会因为某个线程需要等待资源而进入空闲状态. 3. 用户线程和守护线程有什么区别? 当我们在Java

面向对象之: 反射和双下方法

目录 一, 反射 二, 函数VS方法 三, 双下方法 一, 反射 反射:程序可以访问,检测和修改它本身状态或行为的一种能力(自省) python面向对象中的反射:通过字符串的形式操作对象相关的属性 python中的一切事物都是对象(都可以使用反射) 四个可以实现自省的函数,下列方法适用于类和对象(一切对象,类本身也是对象) # 对实例化对象的示例 class Foo: f = '类的静态变量' def __init__(self, name, age): self.name = name sel