有经验的C ++程序员在C#中开发时,最常见或最恶毒的错误是什么?
答案 0 :(得分:26)
struct
和class
之间的差异
using
别名与typedef
int
有多大? (它实际上是用C#定义的)答案 1 :(得分:13)
我在C#中看到很多C ++编码器以COM风格编码,试图解决语言的不足之处。 C#为您的枚举提供了许多类型安全支持,并且通常有更好的API,然后P /调用回C ++。
我见过的另一件事是大多数人都认为C#generics不是模板。
答案 2 :(得分:11)
致电GC.Collect
。
答案 3 :(得分:9)
答案 4 :(得分:5)
认为“垃圾收集”=“我根本不必担心对象的生命周期”。例如,打开FileStream
并忘记关闭它。
或者:
答案 5 :(得分:5)
混淆“通过引用传递”和“引用类型”:
void GetAnArray(int input, ref string[] output);
(与C ++比较:void getAnArray(int input, std::vector<std::string>& output);
)
答案 6 :(得分:4)
答案 7 :(得分:4)
每次都写出完整的命名空间。
当您输入std::this
或boost::that
时,这在C ++中很好用。当你在整个地方重复System.Windows.Forms.Whatever
时,在C#中不是很好。
答案 8 :(得分:4)
顺便提一下,C#编译器中有许多启发式方法可以帮助经验丰富的C ++程序员,他是一名新手C#程序员。例如,如果你说
int x[];
编译器会有用地指出[]是C#中类型的一部分,所以你可能意味着
int[] x;
C#还允许在类声明的末尾添加不必要的分号,这样那些习惯于这种习惯的C ++程序员就不会被它咬掉。
答案 9 :(得分:3)
忘记为每个类成员指定访问修饰符。
答案 10 :(得分:2)
尝试在const
上实施string
正确性。
答案 11 :(得分:2)
一个让我受益的人,我相信很多非C ++人员,由于注册事件使对象保持活跃而泄露内存。
开始时IDisposable开始(如果我诚实的话,仍然会这样做)但是从原生代码到托管代码显然会有所不同,所以我不希望C ++开发人员真正犯规,他们只是不喜欢它。
答案 12 :(得分:1)
使用匈牙利表示法和其他C ++命名约定
private int m_iMyIntField;
class CWidget { ... }