ToB企服应用市场:ToB评测及商务社交产业平台

标题: 关于C#反射概念,附带案例! [打印本页]

作者: 东湖之滨    时间: 2024-2-17 05:50
标题: 关于C#反射概念,附带案例!
反射

C#中的反射是一种使程序在运行时能够动态地获取类型信息并调用其成员的技术。通过反射,程序可以在运行时进行类型的动态加载、创建对象、调用方法和属性,以及访问和修改字段等。反射可以使程序更加灵活,但也增加了一定的性能开销。
在C#中,反射主要是通过System.Reflection命名空间中的类来实现的。以下是一些常用的反射类和方法:
反射的优点

虽然反射在性能和资源消耗方面存在一些开销,但它在应用中仍然具有一些重要的优势和用途,如下所示:
需要强调的是,尽管反射在某些情况下会带来性能开销,但在大多数情况下,这些开销并不会对应用程序的整体性能产生显著的影响。在使用反射时,我们应该权衡其灵活性和便利性与性能之间的平衡,并根据实际需求来选择合适的方法和工具。
 
反射的案例
  1. 1 private void bt_Test_Click(object sender, System.Windows.RoutedEventArgs e)
  2. 2 {
  3. 3 //反射
  4. 4         // 获取MyClass类型的Type对象
  5. 5         Type type = typeof(MyClass);
  6. 6 ​
  7. 7         // 创建MyClass对象
  8. 8         object myClassObj = Activator.CreateInstance(type);
  9. 9 ​
  10. 10         // 获取MyMethod方法的MethodInfo对象
  11. 11         MethodInfo methodInfo = type.GetMethod("MyMethod");
  12. 12 ​
  13. 13         // 调用MyMethod方法
  14. 14         methodInfo.Invoke(myClassObj, null);
  15. 15 ​
  16. 16         //Log.Write(str.ToString(),HaagonLibrary.Log.Log.EnumLogType.Warning);
  17. 17 ​
  18. 18         Type type = typeof(MyClass);
  19. 19 ​
  20. 20         // 动态调用反射方法
  21. 21         object myClassObj = Activator.CreateInstance(type);
  22. 22         MethodInfo methodInfo = type.GetMethod("MyMethod");
  23. 23 ​
  24. 24         var stopwatch = Stopwatch.StartNew();
  25. 25         for (int i = 0; i < 1000000; i++)
  26. 26         {
  27. 27             methodInfo.Invoke(myClassObj, null);
  28. 28         }
  29. 29         stopwatch.Stop();
  30. 30         Log.Write("动态调用耗时:" + stopwatch.ElapsedMilliseconds + " 毫秒",                        HaagonLibrary.Log.Log.EnumLogType.Warning);
  31. 31         // 静态调用反射方法
  32. 32         var myClass = new MyClass();
  33. 33 ​
  34. 34         stopwatch.Restart();
  35. 35         for (int i = 0; i < 1000000; i++)
  36. 36         {
  37. 37             myClass.MyMethod();
  38. 38         }
  39. 39         stopwatch.Stop();
  40. 40         Log.Write("静态调用耗时:" + stopwatch.ElapsedMilliseconds + " 毫秒", HaagonLibrary.Log.Log.EnumLogType.Warning);
  41. 41     }
  42. 42 }
  43. 43 public class MyClass
  44. 44 {
  45. 45     public void MyMethod()
  46. 46     {
  47. 47         Console.WriteLine("Hello, Reflection!");
  48. 48     }
  49. 49 }
复制代码
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4