【发布时间】:2010-06-16 16:46:27
【问题描述】:
对不起,我既厚又懒,但主要是懒惰。实际上,甚至不是这样。我正在努力节省时间,以便我可以在更短的时间内做更多的事情,因为还有很多事情要做。
这是复制引用还是实际的对象数据?
public class Foo
{
private NameValueCollection _nvc = null;
public Foo( NameValueCollection nvc)
{
_nvc = nvc;
}
}
public class Bar
{
public static void Main()
{
NameValueCollection toPass = new NameValueCollection();
new Foo( toPass ); // I believe this only copies the reference
// so if I ever wanted to compare toPass and
// Foo._nvc (assuming I got hold of the private
// field using reflection), I would only have to
// compare the references and wouldn't have to compare
// each string (deep copy compare), right?
}
我想我肯定知道答案:它只复制参考。但我什至不确定我为什么要问这个。
我想我唯一关心的是,如果在通过使用toPass 调用其参数化ctor 来实例化Foo 之后,我是否需要确保我以toPass 传递的NVC 和NVC 私有字段_nvc内容完全一样,我只需要比较他们的引用,对吧?
【问题讨论】:
-
请记住,如果您说
new Foo(toPass),然后将toPass指向另一个对象(无论是新实例还是现有实例),那么foo中的_nvc将不再引用到与toPass相同的对象。引用相等将不再有用(除非这是您的唯一考虑因素)。 -
谢谢,安东尼。我明白那个。是的,我只需要在
new Foo(toPass)之后立即进行参考检查,然后取消 toPass。
标签: c# oop object namevaluecollection