C#:如果传递对象变量,对方法参数使用ref/out是否有任何区别?

C#:如果传递对象变量,对方法参数使用ref/out是否有任何区别?,c#,parameters,pass-by-reference,C#,Parameters,Pass By Reference,可能重复: C#:如果传递对象变量,对方法参数使用ref/out是否有任何区别 在C#中,对象变量只传递对方法的引用,这意味着它已经是ref/out参数。这是否正确?实例是通过引用传递的。不过,指向实例的指针是按值传递的 如果使用ref,指针也会通过引用传递-因此可以使用: private void CustomDispose(ref object x) { x.Dispose(); x = null; } CustomDispose(ref someInstance.someField);

可能重复:

C#:如果传递对象变量,对方法参数使用ref/out是否有任何区别


在C#中,对象变量只传递对方法的引用,这意味着它已经是ref/out参数。这是否正确?

实例是通过引用传递的。不过,指向实例的指针是按值传递的

如果使用
ref
,指针也会通过引用传递-因此可以使用:

private void CustomDispose(ref object x) { x.Dispose(); x = null; }

CustomDispose(ref someInstance.someField);

someInstance的字段将被分配为null。例如,在通过自定义方法进行处理时,它可能很有用。

要确认问题的第一部分:

  • 在.NET中处理对象(实例)时,始终要处理两个实体:实际的匿名对象和对该对象的命名引用。该引用是字段、变量或参数

  • 完全不能将对象实例作为参数传递,只能传递引用

  • 你可以一个接一个地传递引用,这意味着你可以把它指向其他地方


实例不是通过引用传递的,它是一种引用类型。我的意思是,它就像是通过引用传递的。例如,它就像是通过ref传递的一样,而是传递包含实例引用的指针。这就是为什么我在答案中也包括了指针。是的,对不起,这个问题只是我的一个小毛病,它已经出现了很多次,所以现在我想我们应该能够准确地得到它的语义了。@Lasse V.Karlsen:没什么好遗憾的。你是对的,我的答案中的语义并不完美。我只是觉得很清楚这里到底发生了什么。@Lasse:这个问题是指一个特定的场景,我的问题是关于这个问题的。我不认为它是重复的。请阅读Jon Skeets的答案,并查看他在其文章中关于该主题的链接。@Lasse:该问题的答案能够回答我的问题并不意味着我的问题是重复的。
void SetNull(ref MyObject parameter)  
{ 
   parameter = null;  // would make no sense w/o the ref
}