Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:返回引用?_C# - Fatal编程技术网

C#:返回引用?

C#:返回引用?,c#,C#,我试图在一个C#WCF程序中缓存一个代理,这样我就不需要每次为不同的客户机处理消息时都创建它,所以我的目标是编写一个函数来返回对代理的引用 不过,我还不完全熟悉C#的返回机制与“out”参数与“ref”参数的对比,所以我想知道这是否会导致返回对#接口的引用、副本或其他行为 public IInterface GetInterface { return _interface; } IInterface是一种引用类型,因此它将

我试图在一个C#WCF程序中缓存一个代理,这样我就不需要每次为不同的客户机处理消息时都创建它,所以我的目标是编写一个函数来返回对代理的引用

不过,我还不完全熟悉C#的返回机制与“out”参数与“ref”参数的对比,所以我想知道这是否会导致返回对#接口的引用、副本或其他行为

        public IInterface GetInterface
        {
            return _interface;
        }

IInterface
是一种引用类型,因此它将返回一个引用副本,指向实现该接口的类的对象。您仍然指向同一个对象,只是调用代码获得了对同一对象的新引用供自己使用。

IInterface
是一种引用类型,因此它将返回引用的副本到实现该接口的类的对象。您仍然指向同一个对象,只是调用代码获得了对同一对象的新引用供自己使用。

类是引用类型。它们通过引用的副本隐式传递。因此,您在示例中传递的是引用,但传递的是引用的副本。如果要将其传递给正在更改堆上引用指向的对象的方法,了解这一点很重要。在这种情况下,只需将副本指向新对象,原始引用将保持不变


另一方面,“ref”修饰符的作用是传递实际引用本身,而不是所述引用的副本。

类是引用类型。它们通过引用的副本隐式传递。因此,您在示例中传递的是引用,但传递的是引用的副本。如果要将其传递给正在更改堆上引用指向的对象的方法,了解这一点很重要。在这种情况下,只需将副本指向新对象,原始引用将保持不变


另一方面,“ref”修饰符的目的是传递实际引用本身,而不是所述引用的副本。

如果实现接口的具体类型实际上是一个类(与结构相反);那么是的,您的代码将只返回对对象的引用。(否则,)


事实上,在C#中处理类时,几乎不可能“意外”创建对象本身的副本。如果实现
IInterface
的具体类型实际上是一个类(与结构相反),则需要显式调用一些方法,例如
MemberwiseClone
iClonable.Clone

;那么是的,您的代码将只返回对对象的引用。(否则,)

事实上,在C#中处理类时,几乎不可能“意外”创建对象本身的副本。您需要显式调用一些方法,例如
MemberwiseClone
ICloneable.Clone

它将返回引用的副本。它将返回引用的副本。