我正在尝试在C#WCF程序中缓存代理,所以每次处理不同客户端的消息时我都不需要创建它,所以我的目标是编写一个函数来返回对它的引用代理。
我不完全熟悉C#的返回机制而不是“out”参数与“ref”参数,但是想知道这是否会导致返回_interface的引用,或者是副本或其他一些行为。
public IInterface GetInterface
{
return _interface;
}
答案 0 :(得分:2)
IInterface
是一个引用类型,因此它将返回对该类实现该接口的对象的引用的副本。您仍然指向同一个对象,只是调用代码获取对同一对象的新引用以供自己使用。
答案 1 :(得分:1)
类是引用类型。它们通过引用副本隐式传递。因此,您在示例中传递了一个引用,但是您传递了引用的副本。如果要将其传递给正在更改引用指向堆上的对象的方法,则这一点非常重要。在这种情况下,您只需将副本指向新对象,原始引用将保持不变。
另一方面,'ref'修饰符的目的是传递实际的引用本身,而不是所述引用的副本。
答案 2 :(得分:1)
如果实现IInterface
的具体类型实际上是类(而不是 struct );然后是的,你的代码将只返回对象的引用。 (否则,things are a bit more complicated。)
事实上,在处理C#中的类时,几乎不可能“意外地”创建对象本身的副本。您需要明确调用某些方法,例如MemberwiseClone
或ICloneable.Clone
。