C#:返回参考?

时间:2010-10-04 23:09:58

标签: c#

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

我不完全熟悉C#的返回机制而不是“out”参数与“ref”参数,但是想知道这是否会导致返回_interface的引用,或者是副本或其他一些行为。

        public IInterface GetInterface
        {
            return _interface;
        }

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

如果实现IInterface的具体类型实际上是(而不是 struct );然后是的,你的代码将只返回对象的引用。 (否则,things are a bit more complicated。)

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