C#的反射机制
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Reflection; namespace codeTest
{
class Program
{
static void Main(string[] args)
{
string str = "Hello";
//C#中基于System.Type的反射
Type t = str.GetType();
Console.WriteLine(t.FullName);
Type t2 = Type.GetType("System.String", false, true);
Console.WriteLine(t2.FullName);
Type t3 = typeof(string);
Console.WriteLine(t3.FullName); //C#中对于方法、属性等的反射
//GetMethods(t, BindingFlags.Public | BindingFlags.Instance);
Console.WriteLine("{0}", t.GetMethod("Copy"));
t.GetProperties();
t.GetFields(); //C#中动态加载以及推迟绑定
//获取程序集
Assembly assembly = Assembly.Load("codeTest");
//Assembly assembly2 = Assembly.LoadFrom("codeTest.dll"); //从程序集中获取指定对象类型;
Type type = assembly.GetType("codeTest.User"); //使用Activator创建实例(无参数构造函数)
var user1 = Activator.CreateInstance(type);
//使用Activator创建实例(带参数构造函数)
var user2 = Activator.CreateInstance(type, "薄暮"); //使用Assembly创建实例(无参数构造函数)
var user3 = assembly.CreateInstance("codeTest.User"); //反射无参构造函数
ConstructorInfo constructor1 = type.GetConstructor(new Type[] { });
var user4 = constructor1.Invoke(new object[] { }); //反射有参构造函数
ConstructorInfo constructor2 = type.GetConstructor(new Type[] { typeof(string) });
var user5 = constructor2.Invoke(new object[] { "薄暮" }); //调用public函数(无参数)
type.InvokeMember("PublicShow",
BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance, null, user1,
null); //调用public函数(带参数)
string returnValue =
type.InvokeMember("GetString",
BindingFlags.InvokeMethod | BindingFlags.OptionalParamBinding, null, user1,
new object[] { "薄暮" }) as string; // 调用静态方法
string returnValue2 =
type.InvokeMember("StaticMethod", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static,
null, null, new object[] { }) as string; // 调用私有方法 .
type.InvokeMember("PrivateShow",
BindingFlags.InvokeMethod | BindingFlags.NonPublic | BindingFlags.Instance, null, user1,
new object[] { }); //反射属性
var Name =
type.InvokeMember("Name", BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance, null,
user1, new object[] { }) as string; //设置属性(设置Name属性为"新属性")
type.InvokeMember("Name", BindingFlags.SetProperty | BindingFlags.Public | BindingFlags.Instance, null,
user1, new object[] { "新属性" }); //反射字段
string Field =
type.InvokeMember("Field", BindingFlags.GetField | BindingFlags.Public | BindingFlags.Instance, null,
user1, new object[] { }) as string; //设置字段(设置Field字段为"新字段")
type.InvokeMember("Field", BindingFlags.SetField | BindingFlags.Public | BindingFlags.Instance, null,
user1, new object[] { "新字段" });
Console.ReadLine();
} public static void GetMethods(Type t, BindingFlags f)
{
MethodInfo[] info = t.GetMethods(f);
foreach (var item in info)
{
Console.WriteLine("{0}", item.Name);
}
}
} public class User
{
//字段
public string Field;
//属性
public string Name { get; set; } //构造函数
public User()
{
this.Name = "无参构造";
}
public User(string name)
{
this.Name = name;
} //public函数
public void PublicShow()
{
Console.WriteLine(string.Format("反射调用一个public方法"));
}
//private函数
private void PrivateShow()
{
Console.WriteLine(string.Format("反射调用一个Private方法"));
}
//static函数
public static string StaticMethod()
{
return "反射调用了一个Static方法";
}
//带参带返回值函数
public string GetString(string name)
{
return string.Format("大家好,我的名字是:{0}!", name);
} //事件
public event EventHandler eventHandler;
//事件处理函数
public void DoEvent()
{
if (eventHandler != null)
eventHandler(null, EventArgs.Empty);
}
} }
C#的反射机制的更多相关文章
- Java学习之反射机制及应用场景
前言: 最近公司正在进行业务组件化进程,其中的路由实现用到了Java的反射机制,既然用到了就想着好好学习总结一下,其实无论是之前的EventBus 2.x版本还是Retrofit.早期的View注解框 ...
- 第28章 java反射机制
java反射机制 1.类加载机制 1.1.jvm和类 运行Java程序:java 带有main方法的类名 之后java会启动jvm,并加载字节码(字节码就是一个类在内存空间的状态) 当调用java命令 ...
- NPOI操作EXCEL(四)——反射机制批量导出excel文件
前面我们已经实现了反射机制进行excel表格数据的解析,既然有上传就得有下载,我们再来写一个通用的导出方法,利用反射机制实现对系统所有数据列表的筛选结果导出excel功能. 我们来构想一下这样一个画面 ...
- Java反射机制
Java反射机制 一:什么事反射机制 简单地说,就是程序运行时能够通过反射的到类的所有信息,只需要获得类名,方法名,属性名. 二:为什么要用反射: 静态编译:在编译时确定类型,绑定对象,即通过 ...
- java基础知识(十一)java反射机制(上)
java.lang.Class类详解 java Class类详解 一.class类 Class类是java语言定义的特定类的实现,在java中每个类都有一个相应的Class对象,以便java程序运行时 ...
- java基础知识(十一)java反射机制(下)
1.什么是反射机制? java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象都能够调用他的属性和方法,这种动态获取属性和方法的功能称为java的反射机制. ...
- c#反射机制
一:反射的定义 审查元数据并收集关于它的类型信息的能力.元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等. Sys ...
- java反射学习之一反射机制概述
一.反射机制背景概述 1.反射(reflection)是java被视为动态语言的一个关键性质 2.反射机制指的是程序在运行时能获取任何类的内部所有信息 二.反射机制实现功能概述 1.只要给定类的全名, ...
- Java中的反射机制
Java反射机制 反射机制定义 反射机制是Java语言中一个非常重要的特性,它允许程序在运行时进行自我检查,同时也允许其对内部成员进行操作.由于反射机制能够实现在运行时对类进行装载,因此能够增加程序的 ...
- C#反射机制 (转载)
转载:原文出处 http://www.cnblogs.com/binfire/archive/2013/01/17/2864887.html 一:反射的定义 审查元数据并收集关于它的类型信息 ...
随机推荐
- 跟着百度学PHP[4]OOP面对对象编程-6-构造方法(__construct)和构析方法(__destruct)
函数就是成员方法(方法有三:构造方法.成员方法.析构方法) 下面是两种方法. 构造方法和构析方法 00x1 构造方法 构造方法会在创建对象之后自动调用.其名称为__construct <?php ...
- am335x 虚拟机环境变量的设置及注释
我用的还是老的Linux3.2.0的内核,只是借用了TI am335x SDK 3.0里面的工具. 首先下载TI官方的SDK,上一章已经安装了一个Ubuntu14.04的虚拟机. TI 最新的SDK下 ...
- BZOJ 1051: [HAOI2006]受欢迎的牛
Description 一个有向图,求所以能被别的点到达的点的个数. Sol Tarjan + 强连通分量 + 缩点. 缩点以后找强连通分量,缩点,然后当图有且仅有1个出度为1的点时,有答案. Cod ...
- MorkDown 常用语法总结
推荐一款很好用的markdown编辑器:http://www.typora.io/ 基本技巧: 代码高亮 如果你只想高亮语句中的某个函数名或关键字,可以使用``实现 通常编辑器根据diamagneti ...
- 1.1---判断字符串是否所有字符都不相同(CC150)
import java.util.*; public class Different { public boolean checkDifferent(String str) { // write co ...
- 修改apache上传文件大小限制
PHP上传文件大小限制解决方法: 第一: 在php.ini里面查看如下行: upload_max_filesize = 8M post_max_size = 10M memory_limi ...
- java导出生成word
最近做的项目,需要将一些信息导出到word中.在网上找了好多解决方案,现在将这几天的总结分享一下. 目前来看,java导出word大致有6种解决方案: 1:Jacob是Java-COM Bridge的 ...
- 抓取网页内容生成kindle电子书
参考: http://calibre-ebook.com/download_linux http://blog.codinglabs.org/articles/convert-html-to-kind ...
- Django~Test View
https://docs.djangoproject.com/en/1.9/topics/testing/ http://docs.seleniumhq.org/ Automated testing ...
- HDU 4314 Save the dwarfs (DP) ---转载
题目:传送门. 这个是DP,比赛的时候用贪心写了好久没写出来. 题意: 有n个矮人被困在深度为h的井中,每个矮人都ai(脚到肩膀的高度)和bi(手臂长度), 当存在a1 + a2 + ... + ak ...