C#反射机制 Type类型
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace 基于System.Type的反射
{
class Program
{
static void Main(string[] args)
{
//1.使用GetType() 反射类型
string a = "Hello world.";
Type t = a.GetType();
Console.WriteLine(t.FullName);
//2.使用Type.GetType() 反射类型
Type t1 = Type.GetType("System.String", false, true);
Console.WriteLine(t1.FullName);
//3.使用typeof获取类型
Type t2 = typeof(string);
Console.WriteLine(t2.FullName);
//通过方法获取对象的方法
GetMethods(t, BindingFlags.Public | BindingFlags.Instance);
// Console.WriteLine("join Methods:{0}",t.GetMethod("Copy"));
// Console.WriteLine("-----------------------------------------------------------");
// //知识点补充:抽象类不能实例化
#region 动态加载程序集
// //动态加载.net2.0所有程序集,并获取所有类型
Assembly objAssembly;
objAssembly = Assembly.Load("mscorlib,2.0.0.0,Neutral,b77a5c5619934e089");
Type[] types = objAssembly.GetTypes();
foreach (var t3 in types)
{
Console.WriteLine(t3.Name);
}
//获取当前执行的程序集
objAssembly = Assembly.GetExecutingAssembly();
//检查对象(基于System.Type的反射.car)
Type t4 = objAssembly.GetType("基于System.Type的反射.car", false, true);
//创建一个当前对象的实例
object obj = Activator.CreateInstance(t4);
//获取当前对象中存在的方法
MethodInfo mi = t4.GetMethod("IsMoveing");
//判断当前对象是否存在指定的方法 obj指实例化对象,null指IsMoveing()的参数
var ismoving = (bool)mi.Invoke(obj, null);
if(ismoving)
{
Console.WriteLine("Yes");
}
else
{
Console.WriteLine("NO");
}
#endregion
Console.ReadLine();
}
/// <summary>
/// 获取对象的所有方法 GetProperty()获取所有属性 GetFields()获取所有字段
/// </summary>
/// <param name="t"></param>
public static void GetMethods(Type t,BindingFlags f)
{
MethodInfo[] mi = t.GetMethods(f);
foreach (MethodInfo item in mi)
{
Console.WriteLine("{0}",item.Name);
}
}
}
class car
{
public bool IsMoveing()
{
return true;
}
}
}
最新文章
- 4、jvm内存回收&mdash;&mdash;器
- BestCoder Round #85 hdu5778 abs(素数筛+暴力)
- [Java] 03 String获取文件后缀名,判断文件是否合法
- PDB Files: What Every Developer Must Know
- android Button获取焦点
- android usb挂载分析
- PHP运算符知识点
- MyEclipse9安装Checkstyle5.5插件(图解)
- Vue(一)安装
- [No0000197]Windows用户都应该知道的运行命令
- 解决boostrap中,iframe渲染下,苹果手机横向无法显示剩余内容问题
- Linux中USB协议栈的框架简介
- 强大的chrome(1)以acfun为例抓取视频
- 【AC自动机】AC自动机
- php-fpm配置文件,指定session保存目录
- ubuntu,debian root密码忘记破解
- python&#39;s mutable &; immutable
- server端获得到client端的IP地址的格式
- MapReduce学习
- ZZY的宠物(矩阵运算+快速幂)
热门文章
- JavaScript模板引擎artTemplate.js——template.compile()方法
- 前台checkbox复选框提交到后台处理
- ES6新特性:使用export和import实现模块化
- LCA最近公共祖先 ST+RMQ在线算法
- Docker使用
- Bzoj1597 [Usaco2008 Mar]土地购买
- mysql索引
- [创业中, 寻求合作] 业务方向:车联网智能终端;APP蓝牙控制汽车;APP网络远程控制汽车 (联系电话:18503086002)
- CFBundleVersion与CFBundleShortVersionString,上架注意事项
- 三、Shell变量类型和运算符