在C#参考值得注意的是通重要的是有特定的含义。在属性的情况下,该属性最终指向与它所设置的对象相同的地址。在将对象传递给函数的情况下,C#使用通过值语义进行传递引用。这意味着引用本身被复制,所以新的指针指向与传递的对象相同的地址。这可以防止函数通过将其参数设置为null来使任何原始指针无效。为了实际传递一个原始参考,“REF”的关键字,必须使用:
class SomeClass
{
public object MyObjectProperty { get; set; }
}
var someClass = new SomeClass();
object someObject = new object();
someClass.MyObjectProperty = someObject; // Makes MyObjectProperty point to the same location as someObject
在以下的情况下,由值语义参考被使用:
void MyMethod(object someObject)
{
someObject = null;
}
object someObject = new object();
MyMethod(someObject);
Console.WriteLine(someObject == null); // Prints false
在以下的情况下,实际道次由引用语义被使用:
void MyMethod(ref object someObject)
{
someObject = null;
}
object someObject = new object();
MyMethod(ref someObject);
Console.WriteLine(someObject == null); // Prints true
因此,如果我将数据集作为属性参数传递给子窗体,请更改数据集的内容,然后关闭子窗体,而不检索属性返回值,那么我应该在我创建的数据集对象中找到更改父窗体。对 ? – Spooky2010 2010-02-25 04:03:47
绝对正确。 :-) – CesarGon 2010-02-25 04:05:34
@Jon:哎呀!感谢修复! – CesarGon 2010-02-25 11:52:52