c# - 与 C++ 相比,C# 'ref' 关键字的使用

标签 c# c++

我主要使用 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/

相关文章:

c# - 当我在运行时添加控件时,以编程方式绑定(bind)不起作用

c# - 检查字符串是否可以转换为给定类型

c# 异步 curl 请求 - 如何访问响应?

c++ - Unix 域套接字 : sending file descriptor and select()

c++ - 如何创建 802.11 帧?

c++,我可以使用 enable_if 而不是复制粘贴来启用多个特征类特化吗?

c# - 确定端口是否正在使用?

c# - 尝试链接到 cshtml 页面上的 azure blob 文件

c++ - 返回函数参数,可能,糟糕的风格?

c++ - 超出范围指针的比较是否定义明确?