国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

反射 介紹System.Type類

2019-11-17 02:27:19
字體:
供稿:網(wǎng)友

反射 介紹System.Type類

本節(jié)先介紹system.Type類,通過這個類可以訪問關(guān)于任何數(shù)據(jù)類型的信息。

1. system.Type類以前把Type看作一個類,但它實際上是一個抽象的基類。只要實例化了一個Type對象,實際上就實例化了Typc的一個派生類。盡管一般情況下派生類只提供各種Type方法和屬性的不同重載,但是這些方法和屬性返回對應(yīng)數(shù)據(jù)類型的正確數(shù)據(jù),Type有與每種數(shù)據(jù)類型對應(yīng)的派生類。  通常,獲取指向任何給定類型的Type引用有3種常用方式:(1) 使用C#的typeof運算符

Typef = typeof(double)

(2) 使用GetType()方法,所有的類都會從system.object繼承這個方法。

double d = 10;Type t = d.GetType();

(3) 還可以調(diào)用Type類的靜態(tài)方法GetTypeO:

Type t = Type。GetType("system.Double");

Type是許多反射功能的入口 。注意,可用的屬性都是只讀的:可以使用Type確定數(shù)據(jù)的類型,但不能使用它修改該類型!2. Type屬性

3. 方法

system.Type的大多數(shù)方法都用于獲取對應(yīng)數(shù)據(jù)類型的成員信息:構(gòu)造函數(shù)、屬性、方法和事件等。它有許多方法,但它們都有相同的模式。例如,有兩個方法可以獲取數(shù)據(jù)類型的方法的細節(jié)信息:GetMethodO和GetMethods. GetMethods方法返回System.Reflection.MethodInfo對象的一個引用,其中包含一個方法的細節(jié)信息。GetMethods()返回這種引用的一個數(shù)組。其區(qū)別是GetMethods()方法返回所有方法的細節(jié)信息;而GetMethod()方法返回一個方法的細節(jié)信息,其中該方法包含特定的參數(shù)列表。這兩個方法都有重載方法,重載方法有一個附加的參數(shù),即BindingFlags枚舉值,該值表示應(yīng)返回哪些成員,例如,返回公有成員、實例成員和靜態(tài)成員等。

舉例:

方法:

GetMember()和GetMembers()方法返回數(shù)據(jù)類型的任何成員或所有成員的詳細信息,不管這些成員是構(gòu)造函數(shù)、屬性和方法等。

4. C#反射結(jié)合System.Type類實例

namespace myNameSpace  {      class PRogram      {          static void Main(string[] args)          {              /* TypeView示例 star */                            Type t = typeof(myClass);                            AnalyzeType(t);                            /* TypeView示例 end */                Console.ReadLine();          }            //定義嵌套類myClass          class myClass          {              private string _my;                public string My              {                  get { return _my; }                  set { _my = value; }              }          }            //通過System.Type類提供的方法分析類中的成員信息          static void AnalyzeType(Type t)          {              //當前成員名              Console.WriteLine(t.Name);            //myClass              //完全限定名,包含命名空間              Console.WriteLine(t.FullName);        //myNameSpace.myClass              //命名空間              Console.WriteLine(t.Namespace);       //myNameSpace                //獲取直接繼承的類              Type tBase = t.BaseType;                if (tBase != null)              {                  Console.WriteLine(tBase.Name);      //Object              }                //該類公共語言運行庫提供的類型              Type tUnderlyingSystem = t.UnderlyingSystemType;                if (tUnderlyingSystem != null)              {                  Console.WriteLine(tUnderlyingSystem.Name);      //myClass              }                //返回當前類型的所有公共成員數(shù)組              MemberInfo[] Members = t.GetMembers();              //遍歷數(shù)組,迭代每個成員信息              foreach (MemberInfo NextMember in Members)              {                  Console.WriteLine(NextMember.DeclaringType + "," + NextMember.MemberType + "," + NextMember.Name);              }          }      }  }

實例轉(zhuǎn)載http://blog.csdn.net/lulu_jiang/article/details/5683879

遍歷獲取一個類的所有屬性名
 private void button1_Click(object sender, EventArgs e)  2        { 3            Type t = typeof(System.Drawing.Color); 4            string className = t.Name; 5            MessageBox.Show(className); 6 7            //獲取所有方法 8            System.Reflection.MethodInfo[] methods = t.GetMethods(); 9            this.textBox1.Text = "";10            foreach (System.Reflection.MethodInfo method in methods)11            {12                this.textBox1.Text += method.Name + System.Environment.NewLine;13            }1415            //獲取所有成員16            System.Reflection.MemberInfo[] members = t.GetMembers();1718            //獲取所有屬性19            System.Reflection.PropertyInfo[] properties = t.GetProperties();20            foreach (System.Reflection.PropertyInfo property in properties)21            {22                this.lstColors.Items.Add(property.Name);23            }24        }2526        private void lstColors_SelectedIndexChanged(object sender, EventArgs e)27        {28           this.pictureBox1.BackColor=  System.Drawing.Color.FromName(((ListBox)sender).Text);29        }

  方法,構(gòu)造函數(shù)等一些類型信息的獲取可以參考http://m.survivalescaperooms.com/knowledgesea/archive/2013/03/02/2935920.html這個博客對.net反射講解很清楚,實例也比較容易理解。


上一篇:C# Redis

下一篇:C#接口作用的深入理解

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 鹿邑县| 衡阳市| 闸北区| 西青区| 辽阳市| 大埔区| 资中县| 徐水县| 湄潭县| 广德县| 霍州市| 廉江市| 深州市| 克拉玛依市| 阜新市| 公主岭市| 宝丰县| 沙洋县| 余庆县| 宝应县| 晋州市| 深圳市| 灌云县| 遵化市| 宝丰县| 梁河县| 尤溪县| 泾阳县| 扎鲁特旗| 黔西县| 遂溪县| 祁东县| 濉溪县| 南通市| 穆棱市| 陕西省| 海宁市| 易门县| 吉安市| 海南省| 图们市|