2014-06-17 3 views
-1

이것은 어리석은 질문처럼 들릴지 모르지만, 나는 우연히 만났습니다. ref을 사용하여 매개 변수를 참조로 전달할 수 있다는 것을 알고 있습니다. 하지만DataTable은 참조로 전달 되었습니까?

public void SaveRecordsIntoTemporaryTable(DataTable objDataTable, string userSessionID) 
    { 

     // The objDataTable has 5 columns "Id", "Name", "Tag_1", "Tag_2", "Tag_3" 
     // Now in here I remove "Tag_1", "Tag_2", and "Tag_3" 
     objDataTable.Columns.Remove("Tag_1"); 
     objDataTable.Columns.Remove("Tag_2"); 
     objDataTable.Columns.Remove("Tag_3"); 

     ... 

    } 

가 지금은 세 번째 줄에 디버그 포인트를 설정 한이 방법을 가지고,하지만 난 후이 열 "Tag_3"을 제거하고 난 매개 변수에 objDataTable을 통해 내 커서를 올려 놓으면, 그것은 또한 보여 DataTable은 열이 제거 되었습니까? 그래서, 참조로 전달되는 건가요? 내가 ref를 사용하는 경우

reference 통과하게 될 경우

좋아 UPDATE, 그것은 어떤 차이를 만들까요?

+1

입니다. –

+0

@ Razort4x, 편집 내용과 관련하여 ** 참고로 전달되지 않았습니다 **. 그러나'ref' 키워드를 사용하면 null로 설정하는 것과 같이 orignal 참조를 수정할 수 있습니다 – Habib

답변

5

그래서 참조로 전달됩니까?

해당 주소는 값으로 전달됩니다. DataTable은 클래스 (참조 유형)이므로 주소가 값으로 전달되므로 변경 사항이 표시됩니다. 일을

보십시오 : 그것은 진정으로 참조에 의해 전달되는 경우

objDataTable = null; 

가 다음 호출자가 DataTablenull에 있지만을 발생하지 않습니다 설정을 볼 수 있습니다.

은 참조 : 객체에서 파생 된 다른 Parameter passing in C# by Jon Skeet

-1

DataTable, 아무것도 참조로 전달됩니다. 명시 적으로이를 ref으로 전달한 경우 참조는 참조 용이며 다른 변수가 DataSet (또는 null)을 가리 키도록 변경할 수 있습니다.

- 첫 번째 문장을 무시하십시오. DataTable이어야하고 object에서 파생 된 다른 것은 참조 유형입니다.

참조 형식을 값으로 전달하는 메서드를 호출해도 해당 형식의 속성을 수정할 수 있습니다. 'DataTable'이 참조 유형이기 때문에

+5

아니요, 참조로 전달되지 않습니다. 그것은 * 참조이며 값으로 전달됩니다. 이것은 매우 중요한 차이입니다. – Servy

+1

내가 말한 것을 다시 읽으십시오. * 만약 그가'ref'를 사용하여 참조로 전달한다면, 참조에 대한 참조가됩니다. 기존 코드는 사용자가 명시한대로 값으로 참조를 전달합니다. –

+2

무슨 일이 일어나는지 정확하게 이해하고있는 것 같습니다. 그러나 "_...은 reference_로 전달됩니다."라고 말하는 것은 잘못되었습니다. Pass-by-reference 의미론은 잘 정의되어 있으며 여기서는 발생하지 않습니다. – MAV