我主要使用 C++ 工作,现在我在新工作中使用 C#,在阅读此处有关“ref”关键字和 C# 值与引用类型的一些内容后,我仍然发现它们有些混淆。
据我所知,如果您将这些传递给方法,这些将是类似的 C++ 样式:
值类型:
public void CSharpFunc(value)
和
public void CPlusplusFunc(value)
引用类型:
public void CSharpFunc(reference)
和
public void CPlusPlusFunc(&reference)
'ref'/指针
public void CSharpFunc(ref bar)
和
public void CPlusPlus(*bar)
这是一个正确的类比吗?
最佳答案
Is this a correct analogy?
不管其他答案怎么说,不。 ref
在 C++ 中的含义实际上取决于类型。对于值类型,您的评估是正确的(或足够接近)。对于引用类型,更合适的类比是对指针的引用:
public void CPlusPlus(type*& bar)
关于 ref
的全部要点是您可以更改传入的引用。在 C++ 中,您不能通过简单地传递一个指针来做到这一点:
void f(type* bar) {
bar = new_address;
}
type* x;
f(x);
此代码不会更改调用者的 x
值。另一方面,如果您将 bar
作为 type*&
传递,它会更改值。这就是 ref
所做的。
此外,C# 中的引用与 C++ 中的引用完全不同,而更像 C++ 中的指针(因为您可以更改引用引用的对象)。
关于c# - 与 C++ 相比,C# 'ref' 关键字的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11935140/