私は継承、ポリモーフィズム、カプセル化を広範囲に使用していますが、オブジェクトと変数のスコープに関する次の動作を知らなかったことに気付きました。違いは、次のコードで最もよく示されます。
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です)。メソッドに渡すパラメータのスコープ?