我主要使用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.如果你已通过bar的type*&,而另一方面,它会改变的值.这是做什么的ref.
此外,C#中的引用与C++中的引用完全不同,更像是C++中的指针(因为您可以更改引用引用的对象).