我广泛使用了继承、多态和封装,但我刚刚意识到我不知道关于对象范围与变量的以下行为。最好用代码显示差异:
public class Obj
{
public string sss {get; set;}
public Obj()
{
sss = "0";
}
}
public partial class testScope : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Obj a = new Obj();
String sss = "0";
Context.Response.Write(sss); // 0
FlipString(sss);
FlipString(a.sss);
Context.Response.Write(sss + a.sss); // 0 0
FlipObject(a);
Context.Response.Write(a.sss); // 1
Context.Response.End();
}
public void FlipString(string str)
{ str = "1"; }
public void FlipObject(Obj str)
{ str.sss = "1"; }
}
所以我认为当一个变量被传递到一个方法中时,更改仅限于该方法的范围。但是,如果一个对象被传递到一个方法中,那么它的属性就会超出该方法的范围。
如果规则是对象而不是变量存在这种行为,但在.net 中,一切都是对象,字符串(例如示例中的字符串是 System.String),我可以接受这一点那么规则是什么,我如何预测我传递给方法的参数的范围?