可能重复:
Most common or vicious mistakes in C# development for experienced C++ programmers
我是一名很长时间的C ++程序员,即将开始从事C#项目。
要注意哪些概念上的变化,最重要的是,我应该避免在C#中通常用C ++做什么? C ++程序员给C#带来了哪些坏习惯会丢失?
我有一份我打算阅读的C#书籍清单。我希望通过其他程序员的经验来增强这一点,因为我可能会犯同样的错误;我想在它发生之前预防它。
答案 0 :(得分:8)
只是一个例子:
在C ++中,struct和class之间没有区别。多年来,这导致团体和个人定义他们自己的规则,而不是使用其中一个。
在C#中有一个具体的区别。 struct是值类型,class是引用类型。
当C ++程序员将旧的,任意的类/结构定义带到C#时,往往会发生意想不到的事情。
对于转向C#的C ++程序员来说,这是一个相当不错的读物: http://msdn.microsoft.com/en-us/magazine/cc301520.aspx
答案 1 :(得分:8)
需要注意的一点是,C#没有与C ++一样的析构函数。具有C ++析构函数签名的方法在C#中称为终结器,并且不需要(在某些情况下不推荐)实现这些方法。
查看IDisposable界面和垃圾收集的这些文章:Everybody thinks about garbage collection the wrong way和Garbage Collection: Automatic Memory Management in the Microsoft .NET Framework。
答案 2 :(得分:7)
答案 3 :(得分:3)
最糟糕的是看到是
1)过度使用关键上下文(使用监视或锁定()语句锁定)在Web项目中!结果通常是将IIS简化为一个或多或少的单线程系统。
2)字符串处理过多。习惯于自己做所有事情,所以不依赖于框架。 字符串在C#中是不可变的,而它们不在C ++中。
3)使用不安全的代码,因为它们可以而不是因为它们应该。
4)不信任GC
答案 4 :(得分:3)
大的:
答案 5 :(得分:2)
并不多,从C ++转移到C#是一种退化,所以你不能做“坏事”。我唯一能想到的就是依靠自动内存管理:
class A {
ofstream file;
public:
// bla bla
};
在C#中,您需要实现所有IDisposable垃圾,以免泄漏文件......您可以轻易忘记它。
C ++中的坏C#程序员行为将是一个更有趣的话题。
答案 6 :(得分:2)
你可以在C ++中用C#做不到的东西,反之亦然。它们不太可能给你带来麻烦。
最大的变化 - 摆脱“实例化是初始化”的心态。垃圾收集意味着您不必担心分配或释放内存(除非您这样做),但这也意味着您不能依赖于超出范围的内容触发析构函数来清理内存。
在C#中学习“using”构造,并确保使用它。
第二次改变 - 在C ++中,“class”和“struct”实际上是同义词。在C#中,它们是非常不同的东西。
答案 7 :(得分:2)
这不是一个“坏”习惯,但是当你从C ++转换到C#时,你必须要记住这一点:依靠析构函数进行清理。相反,你需要记住实现IDisposable
并通过using
语句控制对象的生命周期。
答案 8 :(得分:1)
从C ++迁移到C#时要改变的事情:
这只是我的头脑
答案 9 :(得分:1)
对我来说最大的转变是不再担心释放内存,线程安全(我的意思是你仍然需要锁定东西,但C#是为第1天的线程设计的,所以没有讨厌的陷阱)和头文件。
如果你觉得使用/不安全,你几乎肯定是错的。
了解课程库。