직장에서 우리는 방법을 통해 사본을 보낸 후 원본 개체가 변경된 문제가 발생했습니다. 원래 클래스에서 IClonable
을 사용하여 해결 방법을 찾았지만 왜 처음 발생했는지 알 수 없었습니다.ref 인수를 사용하지 않고 복사 한 후 원본 객체가 변경된 이유는 무엇입니까?
우리는이 예제 코드를 작성하여 문제를 재현하고 (원래 코드와 유사 함) 누군가가 왜 그런지 설명 할 수 있기를 바랍니다. 당신이 볼 수 있듯이
public partial class ClassRefTest : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
var myclass = new MyClass();
var copy = myclass;
myclass.Mystring = "jadajadajada";
Dal.DoSomeThing(copy);
lit.Text = myclass.Mystring; //Text is expected to be jadajadajada,
but ends up to be referenced
}
}
public class MyClass
{
public string Mystring { get; set; }
}
public static class Dal
{
public static int? DoSomeThing(MyClass daclass)
{
daclass.Mystring = "referenced";
return null;
}
}
는 DoSomething()
방법에서 우리는 어떤 ref
인수를 사용하지 만, 여전히 lit.Text
는 참조 할 수 끝납니다.
왜 이런 일이 발생합니까? 당신의 MyClass
그것이 여기에 예상되는 동작 왜 당신은 원본 데이터에 대한 참조를하지 데이터 자체이 전달되도록 참조 형식이기 때문에 정상
Jon Skeet [Parameters passing in C#] (http://www.yoda.arachsys.com/csharp/parameters.html) – Habib
참고 자료 [String.Copy] (http : // msdn.microsoft.com/en-us/library/system.string.copy(v=vs.110).aspx) 문자열을 복사하지만 참조 링크가 분리되어 분리됩니다. – alykins
[Joesph Albahari가 읽어야]] (http://www.albahari.com/valuevsreftypes.aspx) –