问题描述
vc.net(托管)与c#.net比较,哪个好?习惯了vc++,会用C#.net,但是就是不习惯c#的风格,还有就是没有指针,垃圾回收。想用vc.net(托管),可是资料特别少,不知道有什么缺点?大家都谈谈
解决方案
解决方案二:
vc.net托管编程的时候最好纯托管,这样就跟C#差不多了。要是和本地代码混合的话交互的部分会累死人的。
解决方案三:
首先:1.C#中取消了指针操作,因为指针操作虽然灵活,但是,非常容易引起内存方面的问题,我想楼主应该有深刻的理解,换句话讲,如果你非要使用指针也不是不可以,只要使用非托管代码就OK了,但是这样的话,需要对其代码的安全性有所保证。2.C#中的垃圾回收是自动完成的,不需要像C++中手动清楚各种对象,这些工作都交给了垃圾回收器自动完成,其有一套自己的处理各种对象资源释放的机制,楼主可以自己了解一下,从安全角度来说,垃圾回收器可以满足我们的需要。3.当然,很多应用,尤其是许多的com仍旧还是用C++开发,一方面是因为其灵活的代码能力,还有就是已经使用C++积累了相当一部分的程序资源,不能一下子说放弃就放弃了,而且,有很多人仍旧抱着C++比C#更加安全的指导思想,种种原因吧,但就从一个很简单的dll地狱,应该就可以看出C#是一种发展式的语言,不是么?个人浅见,与君共享~
解决方案四:
vc.net(托管)与c#.net比较,哪个好?:都一样的都是用的.net框架;习惯了vc++,会用C#.net,但是就是不习惯c#的风格,还有就是没有指针,垃圾回收。:c#有指针和VC不太一样就是VB没有才是真的、垃圾回收如果托管了都一样的想用vc.net(托管),可是资料特别少,不知道有什么缺点?大家都谈谈优点是可以和本机代码直接互相操作,而且可以在一个项目里混合写托管的和非托管的,缺点是编译完成后的dll等很多混淆器混淆不了,不过VC托管本来就很乱反编译后不混淆也很乱,还有就是VC托管视乎不够成熟,1.12.0变化很大的说;还有个缺点就是VC托管的语法没C#简洁感觉,有些时候代码量要大些;还有就是资源少,vs里的托管项目也没C#多少老了,起码web这块wpfwfwcf的项目都建立不了不过估计不是不能写就是没项目模板写写标准库,本机exe,服务还可以;
解决方案五:
引用2楼guilin_gavin的回复:
首先:1.C#中取消了指针操作,因为指针操作虽然灵活,但是,非常容易引起内存方面的问题,我想楼主应该有深刻的理解,换句话讲,如果你非要使用指针也不是不可以,只要使用非托管代码就OK了,但是这样的话,需要对其代码的安全性有所保证。2.C#中的垃圾回收是自动完成的,不需要像C++中手动清楚各种对象,这些工作都交给了垃圾回收器自动完成,其有一套自己的处理各种对象资源释放的机制,楼主可以自己了解一下,从安全角…
1、c#可以使用非托管吗?还能用指针?2、垃圾回收是.net的clr的功能,vc.net托管代码也应该有垃圾自动回收功能吧?而且还能手动释放吧,是不是更强?不知道我说得对不?
解决方案六:
引用4楼yueyeli的回复:
1、c#可以使用非托管吗?还能用指针?2、垃圾回收是.net的clr的功能,vc.net托管代码也应该有垃圾自动回收功能吧?而且还能手动释放吧,是不是更强?不知道我说得对不?
1C#有unsafe关键字,使用了他就可以使用指针了.2vc.net托管代码是使用gcnew分配托管对象的.但没有对应的删除操作.你觉得该如何手工释放
解决方案七:
但是vc的托管代码中也可以使用new和delete关键字,是怎么回事啊?char*p;p=newchar[8];deletep;
解决方案八:
没有哪个好哪个不好的说法了都是一家的东西。主要是楼主习惯那个的问题了。建议还是直接使用c#,如果要写非托管代码的话就用c++偶也是从c++过来的
解决方案九:
没有纯粹的好和不好,假设某个不好,为什么还有人用呢?呵呵
解决方案十:
引用6楼yueyeli的回复:
但是vc的托管代码中也可以使用new和delete关键字,是怎么回事啊?char*p;p=newchar[8];deletep;
new和delete是给非托管的代码用的,不信你可以试试用new一个System.String看看托管的东西都得用gcnew
解决方案十一:
老说dll地狱,现实中有几个项目会复杂到有那个地狱的境界
解决方案十二:
微软的directx的wrapperassembly就是vc/clrmix编译的
解决方案十三:
引用9楼akirya的回复:
引用6楼yueyeli的回复:但是vc的托管代码中也可以使用new和delete关键字,是怎么回事啊?char*p;p=newchar[8];deletep;new和delete是给非托管的代码用的,不信你可以试试用new一个System.String看看托管的东西都得用gcnew
但是普通的类型都是可以在托管里面确实可以用new来分配内存呀,正如上面的例子,这个怎么解释呢?
解决方案十四:
引用12楼yueyeli的回复:
但是普通的类型都是可以在托管里面确实可以用new来分配内存呀,正如上面的例子,这个怎么解释呢?
.....普通类型既支持托管分配又支持非托管的内配。托管的类型只能用gcnew分配。
解决方案十五:
哦说的也是反正都差不多吧