在修改作为参数传递的对象的内容时,我应该使用ref吗?

Cou*_*y D 1 c#

假设我们有一个函数MutateX可以改变一个可变对象x (在我的例子中是一个byte []),这不足为奇地改变了x状态.我可以MutateX用两种方式来定义

void MutateX (ref Object x);  // (A)
// or
void MutateX (Object x);      // (B)
Run Code Online (Sandbox Code Playgroud)

无论如何,X仍然是参考值 - 尽管如此.

对我来说ref,该函数将以x某种方式改变(无论它是否将实际参考值更改为某个其他对象).是否有一种形式优先于另一种形式?

我注意到在SerialPort.Read中没有实现

Mar*_*ell 5

如果你只改变了状态的的对象(即不重新分配的参考,但设置属性/调用方法/等),则没有:不使用ref.

对我来说ref表示该函数将以某种方式改变x

确实如此!但你不能改变x-要更改为对象通过x,这是一个不同的事情.

使用refif:

  • 更改引用本身(对于引用类型)
  • 更改值类型的状态(yuck,应该是不可变的,或者使用方法的返回值,这可能更简单)

所以总之; "没有".实际上,这ref是非常罕见且很难理解,这是除非必要,否则最小化使用它的另一个原因.