Type能反应一个类的信息,包含的字段属性方法等特性,是抽象的不能被实例化,只有信息没有实际的数据
Type 反射数据 位于System.Reflection命名空间下
类带有的默认方法 Tostring,Equals,GetHashCode,GetType
Assembly 程序集合 是 由exe 和dell 组成
Assembly 类在System.Reflection命名空间中,允许访问程序集中的元数据,可以加载和执行程序集
Obsolete 是用于方法的更新 ,方法前加上[Obsolete]表示方法过时 被弃用并且显示警告
DebuggerStepThrough 单步调试 特性,可以告诉调试器不要进入该方法或者类,结构,构造方法,访问器
位systerm。Diagnostic下
CLSComliant 声明可公开的成员应该被编译器检查是否符合CLS。兼容的程序集可以被任何.NET兼容的语言使
Serializable 生命结构可以被序列化
NonSerialized 生命结构不可以序列化
DllImport 声明是非委托代码实现的
WebMethod 生命方法应该被作为XML Web服务的一部分暴露
AttributeUsage 生命特性 能应用到什么类型的程序结构。
————————————————————————————————————————
using System.Diagnostics; //诊断 相关Conditional特性 using System.Runtime.CompilerServices; //相关[CallerFilePath]
using System.Reflection;
namespace 类的各种特性 { class Program {
//方法还是会被编辑,添加到程序集中,只是不执行相关的调用 //[Conditional("IsTest")] //停止方法的运行的特性,IsTest如果没有宏定义就停止,如果在同步有宏定义就可以运行 // static void Test2() // { // Console.WriteLine("text2"); // } static void PrintOut(string str,[CallerFilePath]string fileName="",[CallerLineNumber]int lineNumber=0,[CallerMemberName]string merhodName="") { Console.WriteLine(str); Console.WriteLine(fileName); Console.WriteLine(lineNumber); Console.WriteLine(merhodName); Console.WriteLine(); //当被调用的时候就会 显示脚本所在的完整路径,在第几行被调用,调用所在的方法名 } static void Main(string[] args) { MyClass my= new MyClass(); Type type = my.GetType(); Console.WriteLine(type.Name); //类的名称 Console.WriteLine(type.Namespace); //类所在的命名空间 FieldInfo[] array=type.GetFields(); //获取类的字段 foreach(var fieldinfo in array) { Console.WriteLine(fieldinfo.Name+","); } PropertyInfo[] arry2 = type.GetProperties(); //获取类的属性 foreach(var proprty in arry2) { Console.WriteLine(proprty.Name + ","); } MethodInfo[] arry3 = type.GetMethods(); //获取类的方法 foreach(var method in arry3 ) { Console.WriteLine(method.Name + ","); }
MyClass my = new MyClass(); Assembly assem = my.GetType().Assembly; Console.WriteLine(assem.FullName); //程序集的名称 Type[] typs = assem.GetTypes(); //获取程序集内的类 foreach(var typ in typs) { Console.WriteLine(typ); }; Assembly assembly1 = Assembly.Load("SomeAssembly"); //根据程序集的名字加载程序集,它会在本地目录和全局程序集缓存目录查找符合要求的 Assembly assenbly2 = Assembly.LoadFrom(@"c:\x\xx\xxx\SomeAssenmebly.dll"); //程序集的完整路径,不会收索其它位置 Console.ReadKey(); } } }