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

Elm*_*lus 9 c# c++

我主要使用C++工作,现在我在新工作中使用C#,在这里阅读了关于'ref'关键字和c#值与引用类型的内容后,我仍然发现它们有些混乱.

至于我理解这些,如果你将这些传递给方法,这些将是类似的C++样式:

价值类型:

public void CSharpFunc(value)
Run Code Online (Sandbox Code Playgroud)

public void CPlusplusFunc(value)
Run Code Online (Sandbox Code Playgroud)

参考类型:

public void CSharpFunc(reference)
Run Code Online (Sandbox Code Playgroud)

public void CPlusPlusFunc(&reference)
Run Code Online (Sandbox Code Playgroud)

'ref'/指针

public void CSharpFunc(ref bar)
Run Code Online (Sandbox Code Playgroud)

public void CPlusPlus(*bar)
Run Code Online (Sandbox Code Playgroud)

这是一个正确的比喻吗?

Kon*_*lph 12

这是一个正确的比喻吗?

尽管其他答案说的是,没有.什么ref意思在C++方面实际上取决于类型.对于值类型,您的评估是正确的(或足够接近).对于引用类型,更合适的类比是指向引用:

public void CPlusPlus(type*& bar)
Run Code Online (Sandbox Code Playgroud)

关键ref是你可以改变传入的引用.你不能通过传递一个指针在C++中做到这一点:

void f(type* bar) {
    bar = new_address;
}

type* x;
f(x);
Run Code Online (Sandbox Code Playgroud)

此代码不会更改调用者的值x.如果你已通过bartype*&,而另一方面,它改变的值.这是做什么的ref.

此外,C#中的引用与C++中的引用完全不同,更像是C++中的指针(因为您可以更改引用引用的对象).