c#反射技術

反射介紹

簡介

     反射:反射是一個普通的術語,它描述了在運行過程中檢查和處理程序元素的功能。也就是在程序運行時可以控制程序,不是在編譯的時候。開始學習反射就學董兩個類就可以。

Type類

   通過這個類可以訪問關於任何數據類型的信息。Type類只爲存儲類型的引用,是許多反射功能的入口。

實例化對象

方法一得到數據類型

<span style="font-size:18px;">           Type t1=typeof(int);

            Type t2=typeof(double);</span>

方法二從變量中得到

<span style="font-size:18px;">      int n = 1;

            double d = 0.1;

            Type t3 = n.GetType();

            Type t4 = d.GetType();</span>


對象的屬性和方法

屬性

常用的屬性也就是判斷數據的類型返回bool類型

IsClass,IsArray,IsEnum,IsValueType

方法

得到類型的所有方法:

<span style="font-size:18px;">  MethodInfo[] methods =t1.GetMethods();

            foreach (MethodInfo method in methods)

            {

                Console.WriteLine(method.Name);

            }</span>


同樣還可以得到類的所有屬性 字段 事件

Assembly

  類允許訪問程序集的元數據,它包含可以加載和執行程序集的方法。動態得到類型從dll庫中獲取

新建類庫

<span style="font-size:18px;">namespace Test

{

    classPerson

    {

        privatestring _name;

 

        publicstring Name

        {

            get { return _name; }

            set { _name = value; }

        }

        privatestring _address;

 

        publicstring Address

        {

            get { return _address; }

            set { _address = value; }

        }

        privateint _age;

 

        publicint Age

        {

            get { return _age; }

            set { _age = value; }

        }

        public Person(string name, string address, int age)

        {

            this._name = name;

            this.Address = address;

            this._age = age;

        }

        publicstring SayHi()

        {

            return"Hello ,My nameis" + this._name;

        }

    }

}</span>


將生成的dll類庫存放的一個特定位置,

創建類型

<span style="font-size:18px;">Assembly asse = Assembly.LoadFile(@"F:\C++\Demo\RefelectDemo\bin\Debug\Person.dll");

            Type t5 = asse.GetType("Test.Person");

            Console.WriteLine("Person 類的方法");

            MethodInfo[] methods2 =t5.GetMethods();

            foreach (MethodInfo m in methods2)

            {

                Console.WriteLine(m.Name);

            }</span>


動態傳建實體

根基動態得到的type類型創建對象

<span style="font-size:18px;">  DateTime dt = (DateTime)Activator.CreateInstance(typeof(DateTime));</span>


總結

動態控制給編程者帶來了很多方便。一項具體應用實例

http://www.csharp-examples.net/reflection-examples/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章