日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

c#之初见反射

發布時間:2025/3/15 C# 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c#之初见反射 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.什么是反射

? ? ? ? ? 1.1 提供封裝程序集、模塊和類型的對象,說明它是一個對象

?

? ? ? ? ? 1.2 ? 反射,一種計算機處理方式。是程序可以訪問、檢測和修改它本身狀態或行為的一種能力。 ? ? ? ? ? ? 1.3??程序集包含模塊,而模塊包含類型,類型又包含成員。反射則提供了封裝程序集、模塊和類型的對象。 ? ? ? ? ? ? 1.4 ?可以使用反射動態地創建類型的實例,將類型綁定到現有對象,或從現有對象中獲取類型。然后, ? ? ? ? ? ? ? ? ? 可以調用類型的方法或訪問其字段和屬性。 ? ? ? ? ? ? ? ? ?———百度百科? 二.c#中的反射介紹

? ? ? ? ??.2.1使用的命名空間——System.Reflection

? ? ? ? ? ?2.1反射使用的核心類 Type,?Assembly ,Activator

? ? ? ? ? ?2.1.1Type:Type對象提供的屬性和方法可以獲取對象的一切信息,如:方法、字段、屬性、事件...等等

? ? ? ? ? ?2.2.2Assembly:可以通過Assembly的信息來獲取程序的類,實例等編程需要用到的信息。

? ? ? ? ? ?2.2.3Activator:包含特定的方法,用以在本地或從遠程創建對象類型,或獲取對現有遠程對象的引用

? ? ? ? ? ?2.3其他的使用類,Module ,ConstructorInfo ,?MethodInfo ,?FieldInfo,PropertyInfo。。。。

? ? ? ? ? ?2.3.1Module:包含模塊的程序集以及模塊中的類等。可以獲取在模塊上定義的所有全局方法或其他特定的非全局方法。

? ? ? ? ? ?2.3.2ConstructorInfo:解如下的類似信息:構造函數的名稱、參數、訪問修飾符(如 public 或 private)和實現詳細信息

? ? ? ? ?(如 abstract ?或 virtual)等。

? ? ? ? ? 2.3.3MethodInfo :了解如下的類似信息:方法的名稱、返回類型、參數、訪問修飾符(如 public 或 private)和實現詳細信

? ? ? ? ?息(如abstract 或 virtual)等。使用 Type 的 GetMethods 或 GetMethod 方法來調用特定的方法。

? ? ? ? ? 2.3.4?FieldInfo:來了解如下的類似信息:字段的名稱、訪問修飾符(如 public 或 private)和實現詳細信息(如 static)等;

? ? ? ? ?并獲取或設置字段值。

? ? ? ? ? 2.3.5PropertyInfo:來了解如下的類似信息:屬性的名稱、數據類型、聲明類型、反射類型和只讀或可寫狀態等;并獲取或設置屬性值。

三.簡單的使用反射

? ? ? ? ?3.1.利用Type獲取類型和類的信息

? ? ? ? ??

string str = "";//使用類名來獲取類型 Type typeClass = typeof(string);//使用對象來獲取類型Type typeObj = str.GetType();//打印str的類型Console.WriteLine("typeClass' type is {0}\n,typeObj ' type is {1}",typeClass.Name, typeObj.Name);Console.WriteLine("*********************************************");//BindingFlags.Instance|BindingFlags.Public//| BindingFlags.NonPublic 獲取類型的公開和非公開的屬性foreach (PropertyInfo PI in typeObj.GetProperties(BindingFlags.Instance |BindingFlags.Public | BindingFlags.NonPublic)){//打印類型的屬性名字和屬性的類型Console.WriteLine("{0} TYPE IS {1}, ",PI.Name, PI.PropertyType.Name); }Console.WriteLine("*********************************************");//BindingFlags.Instance|BindingFlags.Public//| BindingFlags.NonPublic 獲取類型的公開和非公開的方法foreach (MethodInfo MI in typeObj.GetMethods(BindingFlags.Instance |BindingFlags.Public | BindingFlags.NonPublic)){//打印類型的方法名字Console.WriteLine("{0}'s FUCN IS {1} ",typeObj.Name, MI.Name);}Console.ReadKey();

?

?

3.2上面我們用Type獲取類型的信息 下面我們用獲取的類型來創建的對象

使用type創建對象

class SayHello{public SayHello(){Console.WriteLine("THIS IS SAYHELLO");}public void Say(){Console.WriteLine("I'M SAYING SAYHELLO");}}//動態創建類型Type type = typeof(SayHello);Activator.CreateInstance(type);

程序會打印一個THIS IS SAYHELLO 說明我們創建了一個對象

?

3.3如何使用這個對象

? 1. 我們可以使用接口來使用這個對象這種方法在這里就不說了

? 2.我們可以使用MethodInfo這個類來調用方法

Type type = typeof(SayHello);//在type中找到Say方法MethodInfo say = type.GetMethod("Say");//激活Activator.CreateInstance(type)的對象的Say方法say.Invoke(Activator.CreateInstance(type),null);

?

以上只是一些非常基礎的知識,希望可以幫助大家對反射有一個基本的認識。

?

轉載于:https://www.cnblogs.com/KeyThink/p/7373681.html

總結

以上是生活随笔為你收集整理的c#之初见反射的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。