
编程语言C#
文章平均质量分 79
nikoong
宇宙再宏阔,真理共微尘一色
展开
-
回调函数与C#委托机制
回调函数回调函数是一种有用的编程机制,就是通过函数指针调用的函数。C#里通过委托来提供回调函数的机制。不同于C/C++,委托确保回调方法是类型安全的,支持静态方法和类实例的成员方法,还允许顺序调用多个方法。委托的内部构造编译器实际上会为委托定义一个完整的类。类包含:4个方法:一个构造器、Invoke函数、BeginInvoke和EndInvoke。三个主要的字段 _target、 _methodPtr、 _invocationList字段类型说明_targetSys原创 2021-04-27 11:14:06 · 864 阅读 · 0 评论 -
C#、.NET Framework、CLR区别与联系
很多人没有将C#、.NET Framework(.NET框架)、CLR(Common Language Runtime,公共语言运行库)这三者之间的关系区分清楚,认为其版本号是一一对应的。其实不然,.NET框架是一个独立发布的软件包,其包含了CLR、类库以及相关的语言编辑器等工具。C#代码经过编译之后在CLR环境中运行。由于.NET框架3.0/3.5其实是.NET2.0的扩展(只是增加了一些新的程序集),所以.N...转载 2021-04-26 20:11:52 · 1359 阅读 · 0 评论 -
C#反射机制原理
反射的概念审查元数据并收集关于它的类型信息的能力。元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等。System.reflection命名空间包含的一些个类,提供了方法,允许你反射(解析)这些元数据表的代码 。为什么要反射因为需要在运行时取得一些编译期不存在的类型的信息,创建实例,或者调用方法。反射的性能反射造成编译时无法保证类型的安全性。由于反射严重依赖字符串,所以会丧失编译时的类型安全性。反射速度慢。使用原创 2021-04-26 20:20:35 · 474 阅读 · 0 评论 -
C#托管堆和GC
为什么要自动GC程序员手动管理内存,看似简单,但可能导致大量的编程错误。忘记释放不再需要的内存而造成内存泄露。试图使用已经释放的内存,然后由于内存被破坏而造成程序错误。而且这种bug往往一般无法预测它们的后果或发生的时间。所以C#提供一个托管堆,自动地处理资源清理。当程序员需要手动清理时,也可以调用类中的Dispose方法。托管堆和GC是什么CLR划出一个地址空间区域作为托管堆,同时维护了一个指针NextObjPtr,指向下一个对象在堆中的分配位置。当一个区域被非垃圾对象填满后,CLR会分配更多区域。原创 2021-04-26 21:22:11 · 359 阅读 · 0 评论