天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

C# 反射技術應用

  反射(Reflection)是.NET中的重要機制,通過放射,可以在運行時獲得.NET中每一個類型(包括類、結構、委托、接口和枚舉等)的成員,包括方法、屬性、事件,以及構造函數等。還可以獲得每個成員的名稱、限定符和參數等。有了反射,即可對每一個類型了如指掌。如果獲得了構造函數的信息,即可直接創建對象,即使這個對象的類型在編譯時還不知道。 

  1、.NET可執行應用程序結構 

  程序代碼在編譯后生成可執行的應用,我們首先要了解這種可執行應用程序的結構。

  應用程序結構分為應用程序域—程序集—模塊—類型—成員幾個層次,公共語言運行庫加載器管理應用程序域,這種管理包括將每個程序集加載到相應的應用程序域以及控制每個程序集中類型層次結構的內存布局。

  程序集包含模塊,而模塊包含類型,類型又包含成員,反射則提供了封裝程序集、模塊和類型的對象。我們可以使用反射動態地創建類型的實例,將類型綁定到現有對象或從現有對象中獲取類型,然后調用類型的方法或訪問其字段和屬性。反射通常具有以下用途。

  (1)使用Assembly定義和加載程序集,加載在程序集清單中列出模塊,以及從此程序集中查找類型并創建該類型的實例。
  (2)使用Module了解包含模塊的程序集以及模塊中的類等,還可以獲取在模塊上定義的所有全局方法或其他特定的非全局方法。
  (3)使用ConstructorInfo了解構造函數的名稱、參數、訪問修飾符(如pulic 或private)和實現詳細信息(如abstract或virtual)等。使用Type的GetConstructors或GetConstructor方法來調用特定的構造函數。
  (4)使用MethodInfo了解方法的名稱、返回類型、參數、訪問修飾符(如pulic 或private)和實現詳細信息(如abstract或virtual)等。使用Type的GetMethods或GetMethod方法來調用特定的方法。
  (5)使用FiedInfo了解字段的名稱、訪問修飾符(如public或private)和實現詳細信息(如static)等,并獲取或設置字段值。
  (6)使用EventInfo了解事件的名稱、事件處理程序數據類型、自定義屬性、聲明類型和反射類型等,添加或移除事件處理程序。
  (7)使用PropertyInfo了解屬性的名稱、數據類型、聲明類型、反射類型和只讀或可寫狀態等,獲取或設置屬性值。
  (8)使用ParameterInfo了解參數的名稱、數據類型、是輸入參數還是輸出參數,以及參數在方法簽名中的位置等。
  System.Reflection.Emit命名空間的類提供了一種特殊形式的反射,可以在運行時構造類型。

  反射也可用于創建稱為類型瀏覽器的應用程序,使用戶能夠選擇類型,然后查看有關選定類型的信息。

  此外,Jscript等語言編譯器使用反射來構造符號表。System.Runtime.Serialization命名空間中的類使用反射來訪問數據并確定要永久保存的字段,System.Runtime.Remoting命名空間中的類通過序列化來間接地使用反射。

using System;
using System.Reflection;
namespace ReflectionExample
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
System.Console.WriteLine(
"列出程序集中的所有類型");
Assembly a
= Assembly.LoadFrom("ReflectionExample.exe");
Type[] mytypes
= a.GetTypes();
foreach(Type t in mytypes)
{
System.Console.WriteLine ( t.Name );
}
System.Console.ReadLine();
System.Console.WriteLine(
"列出HelloWorld中的所有方法");
Type ht
= typeof(HelloWorld);
MethodInfo [] mif
= ht.GetMethods ();
foreach(MethodInfo mf in mif)
{
System.Console.WriteLine(mf.Name);
}
System.Console.ReadLine();
System.Console.WriteLine(
"實例化HelloWorld,并調用SayHello方法");
Object obj
= Activator.CreateInstance(ht);
string [] s = {"ZhenLei"};
Object objName
= Activator.CreateInstance(ht,s);
//BindingFlags flags = (BindingFlags.NonPublic | BindingFlags.Public |
// BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);
MethodInfo msayhello
= ht.GetMethod("SayHello");
msayhello.Invoke(obj,
null);
msayhello.Invoke(objName,
null);
System.Console.ReadLine();
}
}
}

NET技術C# 反射技術應用,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 摥管专用动态图399期 | 欧美日韩亚洲一区二区三区在线观看 | 亚洲精品一区国产欧美 | 青青草偷拍国产亚洲欧洲 | 超碰在线 视频 | 老版香蕉版下载 | 国产品无码一区二区三区在线 | 乱色欧美激惰 | 贵妃高h荡肉呻吟np杨玉环 | 妺妺窝人体色777777野大粗 | 中文无码有码亚洲 欧美 | 一本大道香蕉中文在线视频观看 | 精品久久日日躁夜夜躁AV | 999视频精品全部免费观看 | 人妻超级精品碰碰在线97视频 | 国产精品人成在线播放新网站 | 国语精彩对白2021 | 在线观看国产小视频 | 好男人免费观看在线高清WWW | 99视频在线免费观看 | 国产精品99久久免费黑人人妻 | 亚洲人成电影网站色2017 | 国产在线精品亚洲观看不卡欧美 | 久久久久综合网 | 99视频精品全部免费 在线 | 熟女人妻-蜜臀AV-首页 | 色噜噜狠狠一区二区三区 | 午夜亚洲动漫精品AV网站 | 欧美日韩1区 | 青草在线在线d青草在线 | 亚洲综合色婷婷在线影院 | 青青草 久久久 | 日本精品卡一卡2卡3卡四卡三卡 | 风车动漫(p)_在线观看官网 | 亚洲精品中文字幕在线 | 清晨紧湿爱运动h高h | 噜噜噜在线AV免费观看看 | 久久精品国产亚洲AV热无遮挡 | 免费夜色污私人影院网站 | 亚洲视频在线免费看 | 国产成人免费片在线视频观看 |