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