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

最新文章

  1. 4、jvm内存回收&mdash;&mdash;器
  2. BestCoder Round #85 hdu5778 abs(素数筛+暴力)
  3. [Java] 03 String获取文件后缀名,判断文件是否合法
  4. PDB Files: What Every Developer Must Know
  5. android Button获取焦点
  6. android usb挂载分析
  7. PHP运算符知识点
  8. MyEclipse9安装Checkstyle5.5插件(图解)
  9. Vue(一)安装
  10. [No0000197]Windows用户都应该知道的运行命令
  11. 解决boostrap中,iframe渲染下,苹果手机横向无法显示剩余内容问题
  12. Linux中USB协议栈的框架简介
  13. 强大的chrome(1)以acfun为例抓取视频
  14. 【AC自动机】AC自动机
  15. php-fpm配置文件,指定session保存目录
  16. ubuntu,debian root密码忘记破解
  17. python&#39;s mutable &amp; immutable
  18. server端获得到client端的IP地址的格式
  19. MapReduce学习
  20. ZZY的宠物(矩阵运算+快速幂)

热门文章

  1. JavaScript模板引擎artTemplate.js——template.compile()方法
  2. 前台checkbox复选框提交到后台处理
  3. ES6新特性:使用export和import实现模块化
  4. LCA最近公共祖先 ST+RMQ在线算法
  5. Docker使用
  6. Bzoj1597 [Usaco2008 Mar]土地购买
  7. mysql索引
  8. [创业中, 寻求合作] 业务方向:车联网智能终端;APP蓝牙控制汽车;APP网络远程控制汽车 (联系电话:18503086002)
  9. CFBundleVersion与CFBundleShortVersionString,上架注意事项
  10. 三、Shell变量类型和运算符