2013-05-20 7 views
-1

이 코드 샘플이 있습니다. 그것은 참조로 변수를 전달하지만 shouldn (나는 생각하지 않는다). 변수를 참조로 전달하는 것은 기본값이라고 생각합니다. 이것에 대한 문서를 찾기 위해 정확히 무엇을 검색해야할지 모르겠습니다.자동으로 참조로 변수 전달

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 

    namespace CS_example_2 
    { 
     class Program 
     { 
      static void Main(string[] args) 
      { 
       int result = setResult(); 

       List<string> namesResult = new List<string>(); 
       setResultAr(namesResult); 

       for (int i = 0; i < namesResult.Count; i += 1) 
       { 
        if (i == result) 
        { 
         System.Console.WriteLine("Result is " + namesResult[i]); 
         break; 
        } 
       } 

       System.Console.ReadKey(); 
      } 

      static int setResult() 
      { 
       int result = 3; 
       return result; 
      } 

      static void setResultAr(List<string> namesResult) 
      { 
       List<string> res_array = new List<string>() { "item1", "item2", "item3, "item4", "item5" }; 

       foreach (string s in res_array) 
       { 
        namesResult.Add(s); 
       } 
      } 
     } 
    } 
+2

무엇이 질문입니까? – lockstock

+0

이 작업을 설명하는 일부 MSDN 설명서를 찾고 싶습니다. – Sugitime

+0

C#은 명시 적으로 참조를 전달하지 않는 한 항상 매개 변수 'ByVal'을 전달합니다. –

답변

6

나는 그것을 참조로 변수를 전달하는 디폴트 생각합니다.

아니요. 값으로 List<string>에 대한 참조 인 변수를 전달 중입니다. List<string>은 참조 유형이므로 메서드 내에서 내용을 수정할 수 있습니다.

당신은 당신이 변수 자체를 재 할당 하려고하면 변수 (namesResult)를 참조에 의해 전달되지 않는 것을 볼 수있다 즉 : 원래 변수에 영향을주지 않습니다 위의 수행

static void SetList(List<string> namesResult) 
{ 
    List<string> res_array = new List<string>() { "item1", "item2", "item3, "item4", "item5" }; 
    namesResult = res_array; 
} 

, 그것이 가치에 의해 전달되기 때문에. 그러나 참조로 전달한 경우 (ref List<string> 사용) 변수 자체를 다시 할당 할 수 있습니다.

주제에 대한 자료를 읽으면서 Jon Skeet은 Parameter Passing in C#에 훌륭한 기사를 작성하여 자세히 설명합니다.

+0

그럼 어떻게하면 List nameResult가 정의되었을 때 변수 정의가 정의되지 않고 정적 Main에 정의 된 nameResult와 다른 변수로 인식 되는가? – Sugitime

+0

@Sugitime : 그것은 무엇입니까? 당신이 왜 그렇게 생각하지 않습니까? –

+0

@Sugitime - 그것은 똑같은 목록 *을 참조하는 두 개의 뚜렷하게 다른 변수입니다. 변수는 값으로 전달되지만 참조하는 객체는 변경되지 않습니다. –

0

는 MSDN에 답변을 찾았

직접 해당 데이터를 포함하지 않는 기준 유형의 변수; 데이터에 대한 참조를 포함합니다. 참조 유형 매개 변수를 값으로 전달하면 클래스 멤버의 값과 같이 참조가 가리키는 데이터를 변경할 수 있습니다. 그러나 참조 자체의 값은 변경할 수 없습니다. 즉, 동일한 참조를 사용하여 새 클래스에 대한 메모리를 할당하고 블록 외부에서 계속 유지할 수는 없습니다. namesResult 값이 변화하지 않았기 때문에

http://msdn.microsoft.com/en-us/library/s6938f28.aspx

이 변수가 여전히 주요 정의 된 namesResult 같은 데이터를 참조 하였다. 따라서 변수는 두 개의 개별 변수이지만 내부에 포함 된 값은 동일한 데이터에 대한 참조입니다. 따라서 setResultAr 메서드 내에서 사용 된 메서드는 참조 된 데이터에 영향을줍니다.

의미가 있습니다. 고마워.