假设我们有一个函数MutateX,它将使可变对象x(在我的情况下为byte [])突变,这毫不奇怪地会更改x的状态。我可以通过两种方式定义MutateX

void MutateX (ref Object x);  // (A)
// or
void MutateX (Object x);      // (B)


X仍然是参考值-虽然可以使用。

对我而言,ref表示该函数将以某种方式更改x(无论是否将实际参考值更改为某些其他Object)。有没有一种比另一种更好的形式?

我注意到在SerialPort.Read中实现了

最佳答案

如果仅更改对象的状态(即不重新分配引用,而是设置属性/调用方法/等),则否:请勿使用ref


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


确实如此!但是您没有更改x-您正在更改为x引用的对象,这是另一回事。

如果出现以下情况,请使用ref


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


简而言之“没有”。实际上,ref很少见且理解不清,这是除非必要的情况下尽量减少使用它的另一个原因。

10-02 02:34
查看更多