鼎鼎知识库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

27.C#中反射.md 2.1KB

12345678910111213141516171819202122232425262728293031323334353637
  1. > System.Type类
  2. - 获取指向任何给定类型的Type引用有3种常用方式:
  3. - 使用C#的typeof运算符
  4. - 使用GetType()方法,所有类都会从System.Object继承这个方法。
  5. ```
  6. double d=10;
  7. Type t= d.GetType();
  8. ```
  9. - 还可以调用Type类的静态方法GetType():
  10. ```
  11. Type t=Type.GetType("System.Double");
  12. ```
  13. - Type 是许多反射功能的入口。它实现许多方法和属性,这里不可能列出所有的方法和属性。可用的属性都是只读的,可以使用Type确定数据的类型,但不能使用它修改类型
  14. >Assembly 类
  15. - Assembly类在System.Reflection 名称空间定义,它允许访问给定程序集的元数据,它也包含可以加载和执行程序集的方法。与Type类一样,Assemble类包含非常多的方法和属性。
  16. - Assembly类的一个功能是它可以获得在相应程序集中定义的所有类型的详细信息,只要调用Assembly.GetTypes()方法,它就可以返回一个包含所有类型的详细信息的System.Type引用数组。
  17. ```
  18. Type[] types =theAssembly.GetTypes();
  19. foreach(Type definedType in types)
  20. {
  21. DoSomethingWith(definedType);
  22. }
  23. ```
  24. - 获取自定义特性的详细信息
  25. - 用于查找在程序集或类型中定义了什么自定义特性的方法取决于与该特性相关的对象类型。如果要确定程序集从整体上关联了什么自定义特性,就需要调用Attribute类的一个静态方法GetCustomAttributes(),给它传递程序集的引用
  26. ```
  27. Attribute[] definedAttributes=Attribute.GetCustomAttributes(assembly1);
  28. ```
  29. > dynamic 类型
  30. - dynamic类型允许编写忽略编译期间的类型检查的代码。编译器假定,给dynamic类型的对象定义的任何操作都是有效的。如果该操作无效,则在代码运行之前不会检测该错误。
  31. - 对于dynamic类型有两个限制。动态对象不支持扩展方法,匿名函数也不能用作动态方法调用的参数,因此LINQ不能用于动态对象。大多数LINQ调用都是扩展方法,而lambda表达式用作这些扩展方法的参数。