反射机制:.NET框架下的反射机制来源: 发布时间:星期四, 2009年2月12日 浏览:91次 评论:0
最近工作中需要做些机械结构体字段比较由于中用到结构体枚举等类型实在太多大约有2000种的多!加的各个字段都需要比对!哦我神啊如果每个都用手写assert我想天下来即使我手不抽筋眼睛也必将受不了! 听说.NET有个反射机制于是懒病发作再于是有了可以自动生成assert文本!但是为了展示问题关键我这里只给个演示:C#控制台 文件1:Definitions.cs 些结构体枚举类型定义 using ; using .Reflection; Reflaction.Definitions { #region bitmap structures /// <summary> /// bitmap file struct /// </summary> public struct BITMAP_FILE { /// <summary> /// bitmap file header struct /// </summary> public BmpFileHeader bmpfh; /// <summary> /// bitmap info struct /// </summary> public BmpInfo bmpinfo; /// <summary> /// bitmap data struct /// </summary> public BmpData bmpdata; } ... ... } 文件2:Program.cs 主 using ; using .Reflection; using Reflaction.Definitions; Reflaction { Program { void Main( args) { .Console.WriteLine("--------------------------------------------------------------------"); .Console.WriteLine(" .NET框架下支持反射机制演示 "); .Console.WriteLine(" by Loomman, QQ:28077188, MSN: [email protected] QQ裙:30515563 "); .Console.WriteLine("--------------------------------------------------------------------"); Type types = Assembly.GetExecutingAssembly.GetTypes; FieldInfo fieldInfo = null; sTypeName = null; foreach (Type t in types) { switch (t.BaseType.Name) { "Object": sTypeName = ""; ; "ValueType": sTypeName = "struct"; ; "Enum": sTypeName = "enum"; ; } .Console.WriteLine("\n" + sTypeName + " " + t.Name); .Console.WriteLine("{"); fieldInfo = t.GetFields; foreach (FieldInfo f in fieldInfo) { .Console.WriteLine(" " + f.FieldType.Name + " " + f.Name + ";"); } .Console.WriteLine("}"); } .Console.ReadLine; } } } 运行结果: -------------------------------------------------------------------- .NET框架下支持反射机制演示 by Loomman, QQ:28077188, MSN: [email protected] QQ裙:30515563 -------------------------------------------------------------------- Program { } struct BITMAP_FILE { BmpFileHeader bmpfh; BmpInfo bmpinfo; BmpData bmpdata; } struct BmpFileHeader { Int16 bfType; UInt32 bfSize; Int16 bfReserved1; Int16 bfReserved2; UInt32 bfOffBits; } struct BmpInfo { BmpInfoHeader bmiHeader; RGBQUAD bmiColors; } struct BmpInfoHeader { UInt32 biSize; UInt32 biWidth; UInt32 biHeight; Int16 biPlanes; Int16 biBitCount; UInt32 biCompression; UInt32 biSizeImage; UInt32 biXPelsPerMeter; UInt32 biYPelsPerMeter; UInt32 biClrUsed; UInt32 biClrImportant; } struct RGBQUAD { Byte rgbBlue; Byte rgbGreen; Byte rgbRed; Byte rgbReserved; } struct BmpData { Byte bmpdata; } enum TransformRecordTypes_Type_Values { UInt32 value__; TransformRecordTypes_Type_Values EMR_SETWORLDTRANSFORM; TransformRecordTypes_Type_Values EMR_MODIFYWORLDTRANSFORM; } 呵呵还真不赖嘛:) 0
相关文章读者评论发表评论 |