C#反射


1.什么是反射(Reflection)
System.Reflection 命名空間中的類與 System.Type 使你能夠獲取有關加載的程序集和其中定義的類型的信息,如類、接口和值類型。

2.反射能干什么
可以使用反射在【運行時】創建、調用和訪問類型實例。說白了就是通過反射能夠獲取一個未知類的類型。

3.通過代碼解讀反射

  • System.Type獲取有關加載的程序集和其中定義的類型的信息
public class ReflectionTest {
        
        /// <summary>
        /// 反射名稱
        /// </summary>
        public string ReflectionName { get; set; }

        public string GetName()
        {
            return "張三";
        }
}
Type type = typeof(ReflectionTest);
string name = type.Name;//獲取當前成員的名稱
string fullName = type.FullName;//獲取類的全部名稱不包括程序集
string nameSpace = type.Namespace;//獲取該類的命名空間
var assembly = type.Assembly;//獲取該類的程序集名
var module = type.Module;//獲取該類型的模塊名            
var memberInfos = type.GetMembers();//得到所有公共成員
  • 反射構造帶參的例子(帶參)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace FanShe3
{
    class Test
    {
        public Test(string Say)
        {
            Console.WriteLine(Say);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Test t;
            string Say = "哈哈!!創建成功";
            //開始創建反射,這個是獲取當前程序集的意思,如果需要反射類庫可以使用Assembly.Load的方法
            Assembly asm = Assembly.GetExecutingAssembly();
            //需要注意的地方是,如果反射的構造函數帶參只是一個,這里創建的也必須是一個參數的Object數組,而且順序也必須和構造函數一樣
            object[] Obj = new object[1];
            Obj[0] = Say;
            t = (Test)asm.CreateInstance("FanShe3.Test", true, BindingFlags.Default, null, Obj, null, null);

            Console.ReadKey();
        }
    }
}
  • 傳遞對象
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace FanShe4
{
    class Test
    {
        public Test(Test2 t2)
        {
            t2.Say();
        }
    }

    public class Test2
    {
        public void Say()
        {
            Console.WriteLine("哈哈!!創建成功");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Test t;
            Test2 t2 = new Test2();
            //開始創建反射,這個是獲取當前程序集的意思,如果需要反射類庫可以使用Assembly.Load的方法
            Assembly asm = Assembly.GetExecutingAssembly();
            //需要注意的地方是,如果反射的構造函數帶參只是一個,這里創建的也必須是一個參數的Object數組,而且順序也必須和構造函數一樣
            object[] Obj = new object[1];    
            Obj[0] = t2;
            t = (Test)asm.CreateInstance("FanShe4.Test", true, BindingFlags.Default, null, Obj, null, null);

            Console.ReadKey();
        }
    }


}


免責聲明!

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



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