【发布时间】:2013-11-12 22:54:04
【问题描述】:
基本的我搞砸了 C# 属性和引用类型。
public Address adr { get; set; }
public class Address
{
//Field
public string AddressLine1;
//Property
public string Country {get; set;}
}
public void ChangeCountry(string _Country)
{
_Country = "US";
}
public void ChangeAddress(Address _adr)
{
_adr.Country = "US";
}
private void button1_Click(object sender, EventArgs e)
{
adr = new Address();
ChangeCountry(adr.Country);
MessageBox.Show(adr.Country);
//(?)Country is reported empty string. Property did not updated outside.
ChangeAddress(adr);
MessageBox.Show(adr.Country);
//OK. Country is reported 'US'
}
这是我的问题;
当我们将一个属性(简单的或复杂的)直接传递给一个尝试修改它的方法时,是否确保该属性在任何地方都被修改了?我的意思是喜欢 ref 关键字?由于我不能将“ref”关键字与属性一起使用;我直接将属性传递给一个方法进行修改,我不确定它是否总是会在外部更新/修改。当我没有看到 ref 关键字时;这让我很担心:)
在上面的例子中; adr 类在没有 ref 关键字的情况下成功更新(ChangeAddress);但 ChangeCountry 方法无法更新字符串 Country 属性。这是字符串的特例吗?
【问题讨论】:
-
在参数名称中使用下划线是不好(不寻常)的做法。
-
这看起来很像这里的帖子:stackoverflow.com/questions/1402803/…,这可能有助于尝试通过引用传递属性。
-
另外:“当我没有看到 ref 关键字时;这让我很担心” - 呃,为什么?我认为你的意思是相反的。
-
我真的建议你多看看 C# @freewill。此外,尝试使用
ref、out、类和结构进行实验,直到您真正确定它们之间的区别。
标签: c# properties reference parameter-passing argument-passing