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

最新文章

  1. 线程笔记:Future模式
  2. Cesium原理篇:6 Renderer模块(2: Texture)
  3. bzoj 1296: [SCOI2009]粉刷匠
  4. Jetty使用教程(四:21-22)—Jetty开发指南
  5. Linux之RHEL6的开机流程分析
  6. iOS 页面显示在键盘之上
  7. 将DataTable导出到Excel
  8. 在Android设备上判断设备是否支持摄像头
  9. JQ工具函数
  10. hiveql basic
  11. java-Spring-1
  12. java设计模式之二抽象工厂模式(Abstract Factory)
  13. HTML Dom操作数据表
  14. bzoj1812 [Ioi2005]riv
  15. SpringCloud的应用发布(二)vmvare+linux,Centos7.0下发布应用
  16. php添加日志文件
  17. docker17.03.2安装
  18. mui 页面提示:Unable to preventDefault inside passive
  19. Scala方法定义,方法和函数的区别,将方法转换成函数
  20. vue中修改了数据但视图无法更新的情况[转载]

热门文章

  1. windows程序是如何开始执行的??
  2. Laravel 5.1 文档攻略 —— Eloquent:模型关系
  3. centos 6.5 apache配置web应用&防火墙设置(入门级)
  4. SQL Server 2008 R2 Developer (x86, x64, ia64) – DVD (Chinese-Simplified)
  5. Response.Redirect()、Server.Execute和Server.Transfer的区别
  6. 7.31 签到,js 全局预处理笔记
  7. rebot的使用
  8. CentOS卸载OpenJDK并安装Sun JDK
  9. CEF3开发者系列之CEF3入门
  10. Unity3d《Shader篇》描边