假设我们有一个函数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
很少见且理解不清,这是除非必要的情况下尽量减少使用它的另一个原因。