【发布时间】:2008-11-20 16:28:24
【问题描述】:
假设您有这样的属性:
Person person1;
public Person Captin{
get{
return person1;
}
set{
person1 = value;
}
}
public void SomeFunction(){
Captin.name = "Hook"
}
在这种情况下,如果您在属性上设置名称,我们知道 Hook 的新名称将应用于 person1 的基础值。如果我们的实现有点不同怎么办:
public Person Captin{
get{
return ReadCaptinFromDisk();
}
set{
WriteCaptinToDisk(value);
}
}
public void SomeFunction(){
Captin.name = "Hook"
}
在这种情况下,为了正确设置基础值,我们需要调用 Captin 的设置代码作为对 Captin.name 的赋值的一部分。
我很想知道参数集代码是否会在属性引用上调用字段分配或方法调用集。特别是对于这种需要将值传播到磁盘(等)的情况。
【问题讨论】:
-
我们知道 Hook 的新名称将应用于 person1 的底层值 那么,如果
Person类型是一个类 ,然后 getter 将返回一个 reference 到Personobject。然后该对象将被突变。私有字段person1是对同一对象的另一个引用。但是如果Person是一个struct,那么getter 将返回一个value,它是person1的值的copy。因此,如果Person是值类型,即使您的第一个代码也无法工作。
标签: c# properties get set