关于.NET框架下的反射机制

最近工作中需要做一些机械的结构体字段比较,由于程序中用到的结构体,枚举等类型实在太多大约有2000种之多!加之各个字段都需要一一比对!哦,我的神啊,如果每一个都用手写assert,我想一天下来,即使我的手不抽筋,眼睛也必将受不了!

 

听说.NET有个反射机制,于是懒病发作,再于是有了可以自动生成assert文本的程序!但是为了展示问题关键,我这里只给个演示程序:C#控制台程序

 

文件1:Definitions.cs 一些结构体,枚举类型定义

  1. using System;
  2. using System.Reflection;
  3. namespace Reflaction.Definitions
  4. {
  5.     #region bitmap structures
  6.     /// <summary>
  7.     /// bitmap file struct
  8.     /// </summary>
  9.     public struct BITMAP_FILE
  10.     {
  11.         /// <summary>
  12.         /// bitmap file header struct
  13.         /// </summary>
  14.         public BmpFileHeader bmpfh;
  15.         /// <summary>
  16.         /// bitmap info struct
  17.         /// </summary>
  18.         public BmpInfo bmpinfo;
  19.         /// <summary>
  20.         /// bitmap data struct
  21.         /// </summary>
  22.         public BmpData bmpdata;
  23.     }
  24.     ... ...
  25. }

文件2:Program.cs 主程序

  1. using System;
  2. using System.Reflection;
  3. using Reflaction.Definitions;
  4. namespace Reflaction
  5. {
  6.     class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             System.Console.WriteLine("--------------------------------------------------------------------");
  11.             System.Console.WriteLine("              .NET框架下支持的反射机制演示程序                      ");
  12.             System.Console.WriteLine("  by Loomman, QQ:28077188, MSN: Loomman@hotmail.com QQ裙:30515563  ");
  13.             System.Console.WriteLine("--------------------------------------------------------------------");
  14.             Type[]          types = Assembly.GetExecutingAssembly().GetTypes();
  15.             FieldInfo[]     fieldInfo = null;
  16.             string          sTypeName = null;
  17.             foreach (Type t in types)
  18.             {
  19.                 switch (t.BaseType.Name)
  20.                 {
  21.                     case "Object":
  22.                         sTypeName = "class";
  23.                         break;
  24.                     case "ValueType":
  25.                         sTypeName = "struct";
  26.                         break;
  27.                     case "Enum":
  28.                         sTypeName = "enum";
  29.                         break;
  30.                 }
  31.                 System.Console.WriteLine("/n" + sTypeName + " " + t.Name);
  32.                 System.Console.WriteLine("{");
  33.                 fieldInfo = t.GetFields();
  34.                 foreach (FieldInfo f in fieldInfo)
  35.                 {
  36.                     System.Console.WriteLine("    " + f.FieldType.Name + " " + f.Name + ";");
  37.                 }
  38.                 System.Console.WriteLine("}");
  39.             }
  40.             System.Console.ReadLine();
  41.         }
  42.     }
  43. }

运行的结果:

--------------------------------------------------------------------
              .NET框架下支持的反射机制演示程序
  by Loomman, QQ:28077188, MSN: Loomman@hotmail.com QQ裙:30515563
--------------------------------------------------------------------

class 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;
}

呵呵,还真不赖嘛:)by Loomman, QQ:28077188, MSN: Loomman@hotmail.com QQ裙:30515563 ☆程序天堂☆ 请尊重作者原创,转载注明来自裂帛一剑博客,谢谢合作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值