因为非托管资源一定要被保障正确释放所以我们要定义一个Finalizer来避免程序员忘了调用Dispose的情况 。上面的设计就采用了这种形式 。如果我们手动调用Dispose方法就没有必要再保留Finalizer了,所以在Dispose中我们用了GC.SupressFinalize 将对象从Finalizer表去掉 , 这样再回收时速度会更快 。
那么那个disposing和"托管类"是怎么回事呢?是这样:在"托管类"中写所有你想在调用Dispose时让其处于可释放状态的托管代码 。还记得我们说过我们不知道托管代码是什么时候释放的吗?在这里我们只是去掉成员对象的引用让它处于可被回收状态,并不是直接释放内存 。在"托管类"中这里我们也要写上所有实现了IDisposable的成员对象,因为他们也有Dispose,所以也需要在对象的Dispose中调用他们的 Dispose,这样才能保证第二个准则 。disposing是为了区分Dispose的调用方法 , 如果我们手动调用那么为了第二个准则"托管类"部分当然得执行,但如果是Finalizer调用的Dispose,这时候对象已经没有任何引用,也就是说对象的成员自然也就不存在了(无引用),也就没有必要执行"托管类"部分了,因为他们已经处于可被回收状态了 。好了,这就是IDisposable接口的全部了 。现在让我们来回想一下 , 以前我们可能认为有了 Dispose内存就会马上被释放,这是错误的 。只有非托管内存才会被马上释放 , 托管内存的释放由GC管理,我们不用管 。
VB.net 和C#.net 各有什么优缺点C#.net优点:
运算符重载 。不安全代码(指针和固定内存区)、 无符号整数、移位运算 。
VBvb.net锁定内存的优点:
即时编译、静态事件绑定、条件异常捕获、COM兼容类、宽松vb.net锁定内存的类型检查和变量声明、VisualBasicRuntime库、可选参数、带参数属性、模块等语言特征、动态数组 。
通过VB.NET开发好的程序绝对没有问题(包括DirectX游戏开发) 。虽然VB.NET的资料少vb.net锁定内存,但是只要C#支持的VB.NET都支持(大体上这样vb.net锁定内存,因为都要经过MSIL中间环节 。除了指针之类的VB.NET不支持C#支持,但是没有多大实际用处) 。
vb.net的资料以英文资料居多(只有英文资料才有看头,中国的没有什么好资料),得看看英文水平过不过关 。还有VB.NET的ide也比C#的IDE好得多 , 代码看得也舒服 。(C#的大括号{}太烦人) 。
至于VB6对C的帮助,只是理解上会容易一些,其它用处不大 。有VB6的基础学VBNET会方便一些,但是并不是会VB6就会VB.NET,它们差别也不小 。
扩展资料:
NET、C#和ASP.NET之间的区别:
1、NET是一个平台,一个抽象的平台的概念 。
NET平台其本身实现的方式其实还是库 , 抽象层面上来看是一个平台 。
基本可以理解的NET核心就是NETFramwork 。
NETFramework包括两个关键组成元素:
a.CommonLanguageRuntime,公共语言运行时(CLR0)-提供内在管理,代码安全性检测等功能 。
b.NETFrameworkClassLibrary,.NET框架类库(FLC)-提供大量应用类库,提高开发效率 。
学习NETFramework是所有.NET开发人员都必须的,否则开发NET程序永远都是停留在‘外功’的招式 , NETramework是NET开发高手的‘内功’修行之一 。
2、C#是一个程序设计语言,仅仅是一个语言 。
程序设计语言仅仅是为了方便开发人员和计算机沟通的工具,虽然C#语法相对C和 C+要多一些,但是相对来看C#语法都比较固定,这样使用起来却都很容易 。vb.net锁定内存我认可一位朋友说的,C#的语法更严谨!
这里回过来看看NET和C#的关系,不得不提的是NET程序的执行过程 。
推荐阅读
- 求生游戏角色扮演系统小说,求生游戏角色扮演系统小说免费阅读
- gis怎么裁剪中国地图中的某一区域,gis怎么裁剪tif
- 怎么编辑pdf里的文字,怎么编辑pdf里的文字和图片
- 恋爱游戏养成少年,恋爱养成游戏男性向
- GO语言游戏网名不重复 god昵称
- Flutter数据通信,flutter数据库
- 有什么极限赛车的游戏手游,有什么极限赛车的游戏手游
- 虎牙女主播玩赵云直播,虎牙女主播玩赵云直播视频
- linux设置命令s linux设置命令超时时间