如果以下任何理解不准确,请与我们联系。
MyClass m = new MyClass()
< ---> MyClass * m = new MyClass;
MyClass m(5,"foo");
void SomeMethod(ref Widget w)
< ---> void SomeMethod(Widget & w)
或void SomeMethod(Widget * * w)
void SomeMethod(Widget w)
< ---> void SomeMethod(Widget * w)
???
(没有C#等价物)< ---> void SomeMethod(const Widget)
???
(没有C#等价物)< ---> void SomeMethod(const & Widget)
void SomeMethod(out Widget w)
< ---> ??? (没有C ++等价物)答案 0 :(得分:1)
C#和C ++完全不同,超出了他们的名字所暗示的,但无论如何我都会尝试:
MyClass m = new MyClass() <---> MyClass * m = new MyClass;
大致相当,但C#将在不再使用后收集m
。使用C ++,您必须记住delete
对象。在C ++中,分配给堆栈或使用智能指针更加个性化。
??? (no C# equivalent) <---> MyClass m(5,"foo");
C#并没有给你很多控制对象分配的位置。但是,它有struct
种类型可以避免堆分配。
void SomeMethod(ref Widget w) <---> void SomeMethod(Widget & w) or void SomeMethod(Widget * * w)
这些是类似的,但通常应避免使用C#ref
。
void SomeMethod(Widget w) <---> void SomeMethod(Widget * w)
这里的主要区别在于,在C ++中,任何具有指向对象的指针的人都可以删除它。在C#中,垃圾收集器处理删除。 C#有点像使用std::shared_ptr
,但有周期检测。
??? (no C# equivalent) <---> void SomeMethod(const Widget)
??? (no C# equivalent) <---> void SomeMethod(const & Widget)
C#没有像C ++那样强大的const
概念。通常,必须使用每个字段上的readonly
关键字使整个类型不可变。
void SomeMethod(out Widget w) <---> ??? (no C++ equivalent)
在C ++中,通过引用获取对象可以实现与out
变量相同的操作。 out
变量通常是不好的做法,因此这个关键字是一种文档形式。
最重要的是,花时间了解代码是如何用每种语言编写的。许多概念是共享的,但要真正利用某项技术,您应该使用,而不是试图将一种范式强加于另一种范式。