正在阅读:由C++转向C#需要注意的变化(五)由C++转向C#需要注意的变化(五)

2004-11-23 10:08 出处:CSDN 作者:AustinLei 责任编辑:linjixiong

  输出


  CallingDoFunc(7).Result:9.3333333333333339

  象我们看到的那样,属性对输出绝对没有影响,创建属性也不会影响代码的性能。到目前为止,读者也只是在听我论述有关属性的问题,使用ILDASM浏览元数据,就会发现属性确实是存在的。

  映射

  在许多情况下,我们需要一种方法,能够从元数据中访问属性,C#提供了对映射的支持以访问元数据。通过初始化MemberInfo类型对象,System.Reflection名字空间中的这个对象可以用来发现成员的属性,对元数据进行访问。


  System.Reflection.MemberInfoinf=typeof(MyMath);

  对MyMath类型调用typeof操作符,它返回一个由继承MemberInfo而生成的Type类型的变量。

  下一步是对MemberInfo对象调用GetCustomAttributes,并将希望得到的属性的类型作为一个参数传递给GetCustomAttributes。我们将得到一个对象数组,数组的每个成员的类型都是BugFixAttribute。


  object[]attributes;
  attributes=Attribute.GetCustomAttributes(inf,typeof(BugFixAttribute));

  我们就可以遍历这个数组了,打印BugFixAttribute对象的数组,代码下所示:

  属性的打印


  publicstaticvoidMain()
  {
  MyMathmm=newMyMath();
  Console.WriteLine("CallingDoFunc(7).Result:{0}",
  mm.DoFunc1(7));

  //获取成员信息并使用它访问自定义的属性
  System.Reflection.MemberInfoinf=typeof(MyMath);
  object[]attributes;
  attributes=
  Attribute.GetCustomAttributes(inf,typeof(BugFixAttribute));

  //遍历所有的属性
  foreach(Objectattributeinattributes)
  {
  BugFixAttributebfa=(BugFixAttribute)attribute;
  Console.WriteLine("\nBugID:{0}",bfa.BugID);
  Console.WriteLine("Programmer:{0}",bfa.Programmer);
  Console.WriteLine("Date:{0}",bfa.Date);
  Console.WriteLine("Comment:{0}",bfa.Comment);
  }
  }

  类型发现

  我们可以通过映象的方法来研究一个组合实体的内容,如果要建立需要显示组合体内部信息的工具或动态地调用组合体中的途径,这一方法是非常有用的。

  通过映象的方法,我们可以知道一个模块、方法、域、属性的类型,以及该类型的每个方法的信号、该类支持的界面和该类的超级类。我们可以通过如下的形式,用Assembly.Load静态方法动态地加载一个组合体:


  publicstaticAssembly.Load(AssemblyName)

  然后,可以将它传递到核心库中。


  Assemblya=Assembly.Load("Mscorlib.dll");


察看评论详细内容 我要发表评论
作者笔名 简短内容 发表时间
:

键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品