Microsoft MVP성태의 닷넷 이야기
글쓴 사람
닷넷초보
홈페이지
첨부 파일

개체의 전달방식을 다음과 같이 테스트 해보았습니다.

object a = "aaa";
List<string> strList = new List<string>();
strList.Add("a");
strList.Add("b");
strList.Add("c");

t tt = new t();
tt.aaa = "aaa";

this.test(a, strList, tt);

private void test(object a, List<string> strList, t tt)
{
            a = 1;

            strList[0] = "aaaaaaa";
            strList.RemoveAt(1);

            tt.aaa = "1";
}

public class t
{
            public string aaa{get;set;}
}

위 결과의 값은 다음과 같이 나왔습니다.

Object타입의 a값은 "aaa"
List<string>타입의 strList는 1번째 요소가 제거되고, 0번째 요소의 값이 바뀌었습니다.
t클래스 타입의 aaa속성 값은 1

여기서 궁금한게 있습니다.

t클래스 타입의 변수를 기본적으로 레퍼런스를 참조해서 값이 test메서드에서 처리한 값으로 변경 되었는데
일반 Object타입의 변수는 DeepCopy가 되지 않은 결과가 나왔습니다.

명시적으로 ref키워드를 붙여주면 레퍼런스로 참조되어 처리 되긴 합니다.
Object타입이 아닌 다른 일반 클래스를 명시적으로 ref키워드를 붙여주지 않아도 기본적으로 레퍼런스가 참조 되어 처리 되는거 같습니다.

닷넷의 모든 개체는 기본적으로 Object에서 파생되었다고 들었습니다.
그렇다면 List의 제네릭 클래스나 t클래스 또한 Object를 기본적으로 상속 받고 있을텐데 왜 결과가 틀리게 나오는지 알려주셨으면 합니다.

제가 테스트한 파일 첨부파일로 올리겠습니다.

감사합니다.








[최초 등록일: ]
[최종 수정일: 7/7/2016]


비밀번호

댓글 작성자
 



2016-07-08 02시49분
혹시, 제 책을 읽어보시고 질문하시는 건가요? 아니면 개인적인 궁금함이신 건가요? 전자의 상황이라면 제가 제 페이지를 알려드리면 되지만, 후자의 상황이라면 설명을 좀 해야 합니다. ^^
정성태
2016-07-08 02시49분
[닷넷초보] 개인적으로 공부하다가 궁금해서 질문 드렸었습니다^^ 답변 부탁드려도 될까요?

[guest]
2016-07-08 02시58분
쉽게 설명해 보면. ref/out 예약어를 지정하지 않았다면 매개변수로 넘기는 것은 다른 변수를 만들어 대입하는 것과 동일한 동작이라고 보면 됩니다. 이런 식입니다.

object a = "555";
object b = a;
b = 1;

당연히 a 값이 1로 변경되지 않습니다. 나머지 2개의 변수도 저렇게 놓고 생각하면 됩니다.
정성태

... 61  62  63  [64]  65  66  67  68  69  70  71  72  73  74  75  ...
NoWriterDateCnt.TitleFile(s)
1025궁그미1/18/201222370네이버 소켓 로그인 이해가 안되는점이 있는데요 [2]
1022선무당1/11/201220197TFS 에서 공통 Assembly 공유 방법에 대해서 해결책이 없을까요? [2]
1021김재영1/8/201219300대리자를 메소드 파라메터로 넘겨도 됩니까? [2]파일 다운로드1
1019남산골11/13/201922485안녕하세요!! 성태님~~ [3]
1018강한구12/29/201125792WPF ClickOnce 배포시 콤포넌트 dll 다운로드 문제에 대하여 질문 있습니다. [1]
1017임동찬12/28/201122758smart client와 xbop, silverlight [6]
1015개똥이12/22/201119876RMCLOCK 설정 관련 질문이요ㅜ [2]
1011사길수12/16/201120162hyper-v 이더넷 카드 관련 문의 좀 드립니다. [1]
1006루로니12/13/201122139윈도우7과 XP의 DLL후킹 처리에 관해서 질문입니다. [3]
1005남산골12/13/201122171안녕하세요!! 첫 인사드립니다. [3]
1004뽀로로12/12/201119087Managed 어셈블리에서의 COM EntryPoint procaddress 문제 [1]
1003나그네12/8/201121323닷넷에서 가상메모리(Commit) 의 크기를 줄이거나 해제하는 방법은 어떻게 해야할지요? [1]
1002나그네11/29/201120792안녕하세요 ^^ 문제가 생겨서 혹시나 여기서라면 답이 나오지 않을까 해서.. [1]
1001선무당11/29/201122060clickonce+ntd 시스템에서 proxy Server 가 개입되는 경우 cache 해결을 위한 방법... [1]
1000초보개발자11/28/201120389웹서비스용 웹 서버의 SSD 가치에 대해서... [1]
999날쌘돌이11/25/201117624ADFS와 WIF 질문 [1]
998윤용한11/9/201119540File Write 도중 정전 발생 시 대처 방법 있나요? [2]
997조장원11/7/201118823Silverlight 에서의 Auth 방법에 대한 고찰 [2]파일 다운로드1
996파몽11/3/201121891VS2010 에서 타겟플랫폼이 x86으로 변경이 된걸일까요? [2]
995강신명10/24/201118224sharepoint2010+win7 client 오류 [2]파일 다운로드1
992라이언10/11/201118310캡션에 chapter numbers 넣기
993정성태10/11/201121211    답변글 [답변]: 캡션에 chapter numbers 넣기
991우상욱8/21/201123005세션 타임 아웃에 관해서 질문드립니다. [2]
990김재영8/20/201126115VS2010의 윈폼의 Load이벤트에서 예외가 잡혀지지 않습니다. [3]파일 다운로드1
989우상욱8/20/201118778polling에 대해 감이 안잡혀서 질문드립니다 [1]
988WooY...8/17/201118727성태님~ 작은 부탁 하나 있습니다~ [2]
... 61  62  63  [64]  65  66  67  68  69  70  71  72  73  74  75  ...