2014-12-15 5 views
-4

cpy 값에 변화가 ori 값에 영향을주지 않습니다 참조 형처럼 행동하지 않기 때문에 문자열은 참조 형처럼 행동하지 않습니다 :문자열은 아래의 코드에서

class WebPage 
{ 
    public string Text; 
} 

// Now look at reference type behaviour 
WebPage originalWebPage = new WebPage(); 
originalWebPage.Text = "Original web text"; 

// Copy just the URL 
WebPage copyOfWebPage = originalWebPage; 

// Change the page via the new copy of the URL 
copyOfWebPage.Text = "Changed web text"; 

// Write out the contents of the page 
// Output=Changed web text 
Console.WriteLine ("originalWebPage={0}", 
          originalWebPage.Text); 

두 사람은 참조 형식이있는 동안 동작 클래스와 문자열 사이에 다른 이유는 누군가가 나를 알 수 있습니까?

+0

문자열은 변경할 수 없으며 변경할 수 없습니다. – Saggio

+0

내가 말할 수있는 가장 좋은 것은 참조 유형의 작동 방식을 조회하는 것입니다. –

+5

사실, 아니요, 클래스는 다른 행동을 취하지 않습니다. 당신은 당신의 예제에서 두가지 다른 일을하고 있습니다 : 문자열의 경우,'string' 변수'cpy' 자체에 새로운 값 (''text 2 "')을 할당합니다. 클래스'WebPage'의 경우, 변수'copyOfWebPage' (참조되는 인스턴스)의 * 속성 * ('Text')에 새로운 값 (''변경된 웹 텍스트 ''')을 할당하면됩니다. –

답변

5

strings이 변경 불가능하더라도이 상황은 그와 관련이 없습니다. 참조 유형에 새 참조를 지정하면 이전 참조를 버리게됩니다. 두 번째 예제에서는 객체의 속성을 변경합니다. 객체가 동일한 위치를 가리키고 있기 때문에 두 객체 모두 영향을받습니다. 당신이

cpy = "text 2"; 

을 수행 할 때

는 그러나 그것은 새로운 문자열을 생성하고 cpy로이 기준의 저장 및 cpy의 이전 참조를 던져 의미한다.

2

클래스는 문자열과 똑같이 동작합니다. 두 예제에서 똑같은 일을하지 않을 것입니다.

WebPage originalWebPage = new WebPage(); 
originalWebPage.Text = "Original web text";  

WebPage copyOfWebPage = originalWebPage; 

//Overwrite the copy variable just like you did before 
copyOfWebPage = new WebPage(); 
copyOfWebPage.Text = "Modified web text"; 

Console.WriteLine ("originalWebPage={0}", originalWebPage.Text); 
Console.WriteLine ("copyOfWebPage={0}", copyOfWebPage.Text); 

Run this example

클래스의 예를 들어 당신이 cpyori의 텍스트를 복사

string cpy = ori; 
cpy = "text 2"; 

했을 때, 무슨 일이 일어나고 있는지 더 분명하게, 당신은 다음 immedatly 것을 멀리 던졌다 값 cpy에 복사 된 "text 2"을 입력하면 실제로는 새 개체를 가리 키도록 한 cpy 개체의 값을 실제로 "수정"하지 않았습니다.

관련 문제