Я широко использую наследование, полиморфизм и инкапсуляцию, но я только что понял, что не знаю следующего поведения области видимости объекта и переменной. Разница лучше всего показана с кодом:
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) я предсказываю область действия параметра, который передаю в метод?