麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

【C#】.NET提供了哪些類型來實現(xiàn)反射

2019-11-14 13:30:36
字體:
供稿:網(wǎng)友

實現(xiàn)反射的類型大多數(shù)都定義在System.Reflection命名空間之下。

Assembly  定義一個Assembly,它是可重用、無版本沖突并且可自我描述的公共語言運行庫應(yīng)用程序構(gòu)造塊。

AssemblyName  完整描述程序集的唯一標識

EventInfo  發(fā)現(xiàn)事件的屬性(Attribute)并提供對事件元數(shù)據(jù)的訪問權(quán)

FieldInfo  發(fā)現(xiàn)字段屬性(Attribute)并提供對字段元數(shù)據(jù)的訪問權(quán)

LocalVariableInfo  發(fā)現(xiàn)局部變量的屬性,并提供對局部變量元數(shù)據(jù)的訪問

ManifestResourceInfo  包含清單資源拓撲信息

MemberInfo  獲取有關(guān)成員屬性的信息,并提供對成員元數(shù)據(jù)的訪問

MethodBase  提供有關(guān)方法和構(gòu)造函數(shù)的信息

MethodBody  提供對用于方法體的元數(shù)據(jù)和MSIL的訪問

Module  在模塊上執(zhí)行反射

ParameterInfo  發(fā)現(xiàn)參數(shù)屬性(Attribute)并提供對參數(shù)元數(shù)據(jù)的訪問

PRopertyInfo  發(fā)現(xiàn)屬性(Property)的屬性(Attribute)并提供對屬性(Property)元數(shù)據(jù)的訪問

 

示例:

using System;using System.Reflection;namespace UseReflection{    partial class UseReflection    {        /// <summary>        /// 分析程序集        /// </summary>        /// <param name="assembly"></param>        private static void AnalyzeAssembly(Assembly assembly)        {            // 打印程序集的名稱            Console.WriteLine("程序集名字:" + assembly.FullName);            // 打印程序集的位置            Console.WriteLine("程序集位置:" + assembly.Location);            // 打印程序集是否存在于GAC中            Console.WriteLine("程序集是否存在于GAC中:" + assembly.GlobalAssemblyCache.ToString());            // 打印包含程序集清單的模塊名單            Console.WriteLine("包含程序集清單的模塊:", assembly.ManifestModule.Name);            // 打印程序集的CLR版本            Console.WriteLine("運行程序集需要的CLR版本:", assembly.ImageRuntimeVersion);            Console.WriteLine("現(xiàn)在開始分析引用的程序集");            Module[] modules = assembly.GetModules();            foreach (Module module in modules)            {                AnalyzeModule(module);            }        }        /// <summary>        /// 分析模塊        /// </summary>        /// <param name="module"></param>        private static void AnalyzeModule(Module module)        {            Console.WriteLine("模塊名:" + module.Name);            Console.WriteLine("模塊的UUID:" + module.ModuleVersionId);            Console.WriteLine("開始分析模塊下的類型");            Type[] types = module.GetTypes();            foreach (Type type in types)            {                AnalyzeType(type);            }        }        /// <summary>        /// 分析類型        /// </summary>        /// <param name="type"></param>        private static void AnalyzeType(Type type)        {            Console.WriteLine("類型名字:" + type.Name);            Console.WriteLine("類型的類別:" + type.Attributes);            if (type.BaseType != null)            {                Console.WriteLine("類型的基類是:" + type.BaseType.Name);            }            Console.WriteLine("類型的GUID:" + type.GUID);            // 設(shè)置感興趣的類型成員            BindingFlags flags = (BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance);            // 分析成員            FieldInfo[] fields = type.GetFields(flags);            if (fields.Length > 0)            {                Console.WriteLine("開始分析類型的成員");                foreach (FieldInfo field in fields)                {                    AnalyzeField(field);                }            }            // 分析包含的方法            MethodInfo[] methods = type.GetMethods(flags);            if (methods.Length > 0)            {                Console.WriteLine("開始分析類型的方法");                foreach (MethodInfo method in methods)                {                    AnalyzeMethod(method);                }            }            // 分析屬性            PropertyInfo[] properties = type.GetProperties(flags);            if (properties.Length > 0)            {                Console.WriteLine("開始分析類型的屬性");                foreach (PropertyInfo property in properties)                {                    AnalyzeProperty(property);                }            }        }        /// <summary>        /// 分析成員        /// </summary>        /// <param name="field"></param>        private static void AnalyzeField(FieldInfo field)        {            Console.WriteLine("成員名字:" + field.Name);            Console.WriteLine("成員的類別:" + field.Attributes);            Console.WriteLine("成員的類型名:" + field.FieldType.Name);        }        /// <summary>        /// 分析方法        /// </summary>        /// <param name="method"></param>        private static void AnalyzeMethod(MethodInfo method)        {            Console.WriteLine("方法名字:" + method.Name);            Console.WriteLine("方法的類別:" + method.Attributes);            Console.WriteLine("開始分析方法的參數(shù)");            ParameterInfo[] parameters = method.GetParameters();            if (parameters.Length <= 0)            {                Console.WriteLine("方法沒有參數(shù)");            }            foreach (ParameterInfo parameter in parameters)            {                AnalyzeParameter(parameter);            }            Console.WriteLine("分析方法的返回參數(shù)");            ParameterInfo retpar = method.ReturnParameter;            AnalyzeParameter(retpar);        }        /// <summary>        /// 分析方法參數(shù)        /// </summary>        /// <param name="parameter"></param>        private static void AnalyzeParameter(ParameterInfo parameter)        {            Console.WriteLine("參數(shù)名字:" + parameter.Name);            Console.WriteLine("參數(shù)的類別:" + parameter.Attributes);            Console.WriteLine("參數(shù)的類型:" + parameter.ParameterType.Name);        }        /// <summary>        /// 分析屬性        /// </summary>        /// <param name="property"></param>        private static void AnalyzeProperty(PropertyInfo property)        {            Console.WriteLine("屬性名字:" + property.Name);            Console.WriteLine("屬性的類別:" + property.Attributes);            Console.WriteLine("是否可讀:" + property.CanRead.ToString());            Console.WriteLine("是否可寫:" + property.CanWrite.ToString());        }    }}

 

using System;using System.Reflection;using System.Security.Permissions;namespace UseReflection{    [PermissionSet(SecurityAction.Demand, Name = "FullTrust")]    partial class UseReflection    {        static void Main(string[] args)        {            Assembly assembly = Assembly.LoadFrom(@"../../../../SimpleAssembly/SimpleAssembly/bin/Debug/SimpleAssembly.exe");            AnalyzeAssembly(assembly);            // 創(chuàng)建一個程序集中的類型的對象            // 這里嘗試創(chuàng)建SimpleAssembly對象            Console.WriteLine("利用反射創(chuàng)建類型");            string[] pars = { "測試反射" };            object o = assembly.CreateInstance(assembly.GetModules()[0].GetTypes()[0].ToString(), true, BindingFlags.CreateInstance, null, pars, null, null);            Console.WriteLine(o);            Console.Read();        }    }}

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 日韩av影片在线观看 | 99这里精品 | 欧美精品成人一区二区在线观看 | 欧美亚洲黄色片 | 国产一级桃视频播放 | 精品在线观看一区二区 | 毛片一级网站 | 久久久免费观看完整版 | 美国一级免费视频 | 热re91久久精品国产99热 | 国产色爱综合网 | 国产精品免费一区二区 | 欧美综合日韩 | 99最新网址 | 沉沦的校花奴性郑依婷c到失禁 | 日本在线观看中文字幕 | 欧美成人精品欧美一级 | 久久免费视频7 | 久久精品成人影院 | 国产精品久久99精品毛片三a | 久久久久久久久久久久久久av | 国产成人av在线播放 | 久久精品一区二区三 | 国产日韩在线观看一区 | 亚洲国产超高清a毛毛片 | 欧美精品久久天天躁 | 国产一区二区三区四区精 | 亚洲国产精品一区二区久久 | 亚洲看片网 | 男女生羞羞视频网站在线观看 | 亚洲日本韩国在线观看 | 中国免费一级毛片 | 色av综合在线| 久久精品一区二区三区四区五区 | 欧美特黄特色视频 | 亚洲第一黄色网 | 久久精品一级片 | 深夜视频福利 | 精品久久久久久综合日本 | 蜜桃视频观看麻豆 | 亚洲一区 国产 |