C# C++与C中指针与函数参数的等价性

C# C++与C中指针与函数参数的等价性,c#,c++,.net,C#,C++,.net,如果我以下任何理解不准确,请告诉我 MyClass m=新MyClass MyClass*m=新MyClass; ??? 无C类等效物MyClass m5,foo; void SomeMethodref小部件w void SomeMethodWidget&w或void SomeMethodWidget**w void SomeMethodWidget w void SomeMethodWidget*w ??? 没有C等效的void SomeMethodconst小部件 ??? 无C等效void

如果我以下任何理解不准确,请告诉我

MyClass m=新MyClass MyClass*m=新MyClass; ??? 无C类等效物MyClass m5,foo; void SomeMethodref小部件w void SomeMethodWidget&w或void SomeMethodWidget**w void SomeMethodWidget w void SomeMethodWidget*w ??? 没有C等效的void SomeMethodconst小部件 ??? 无C等效void SomeMethodconst和Widget void SomeMethodout小部件w???无C++等价

C和C++是完全不同的,比他们的名字所暗示的要多,但是无论如何我会尝试:

MyClass m = new MyClass() <---> MyClass * m = new MyClass;
C并不能让您对对象分配的位置有太多的控制。但是,它具有可以避免堆分配的结构类型

void SomeMethod(ref Widget w) <---> void SomeMethod(Widget & w) or 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++中引用引用的对象可以实现与变量相同的引用。out变量通常是不好的做法,所以这个关键字是文档的一种形式


最重要的是,花点时间理解如何用每种语言编写代码。许多概念是共享的,但要真正利用一种技术,您应该使用它,而不是试图将一种范式强制转换为另一种范式void SomeMethod(Widget w) <---> void SomeMethod(Widget * w)
??? (no C# equivalent) <---> void SomeMethod(const Widget)
??? (no C# equivalent) <---> void SomeMethod(const & Widget)
void SomeMethod(out Widget w) <---> ??? (no C++ equivalent)