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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM