2012-10-20 5 views
1

저는 C# 기술을 익히고 C# 책을 읽습니다. 배열 장의 params 키워드를 발견했습니다. 왜 누군가는 실제로 키워드 배열을 메서드에 전달하는 대신에 params 키워드를 사용합니다. 나는 두 가지 접근법 모두 params 키워드가 있거나없는 배열을 통과하여 테스트했다. 둘 다 괜찮 았어. params 키워드를 사용해야하는 실제적인 이유가 있습니까? 여기params 키워드를 사용하는 이유

using System; 

namespace ConsoleApplication9 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string[] classname = new string[5] { "cs150", "cs250", "cs270", "cs300", "cs350" }; 
      Prints(classname); 

      Console.Read(); 
     } 

     public static void Prints(params string[] t) 
     { 
      foreach (var s in t) 
      { 
       Console.WriteLine(s); 
      } 
     } 
    } 
} 

PARAMS없이 코드입니다 : 여기

내 코드 당신이 명확하게 찾을 수 있습니까 Console.WriteLine 이러한 호출

using System; 

namespace ConsoleApplication9 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string[] classname = new string[5] { "cs150", "cs250", "cs270", "cs300", "cs350" }; 
      Prints(classname); 

      Console.Read(); 
     } 

     public static void Prints(string[] t) 
     { 
      foreach (var s in t) 
      { 
       Console.WriteLine(s); 
      } 
     } 
    } 
} 
+0

params 키워드는 메소드에 전달되는 변수 수가 가변적 인 상황에서 유용합니다.그것은 기본적으로 "이봐 요, 그들이이 문자열에 1 개의 문자열이나 100 개의 문자열을 보낼지라도 같은 것을 취급합니다."(주의 사항이 많습니다). 메서드의 마지막 매개 변수 일 수 있습니다. –

+0

바로 * params * 키워드와 같습니다. 그것은 "문법 설탕"이라고합니다. 그것은 달콤합니다. 그렇지 않으면 C 및 C++ 프로그래머를 행복하게 유지하기 위해 언어에 추가되었으므로 익숙합니다. –

답변

11

?

Console.WriteLine("Hello {0}, you are {1}", person.Name, person.Age); 

또는

Console.WriteLine("Hello {0}, you are {1}", 
        new object[] { person.Name, person.Age }); 

(당신은 할 수 없습니다 위의 경우에도 사용 암시 적으로 형식화 된 배열 ( new[]), 하나 person.Name 또는 person.Age은 ... 그들은 모두 인 경우에 유형 object의 경우를 제외하고 string 괜찮 으면 좋겠지 만 문자열 배열을 만들 것입니다 ...)

나는 먼저 선호합니다. 읽을 때 더 간단합니다. 그게 전부입니다 params - 그것은 단지 발신자가보다 간결한 구문을 사용할 수 있습니다. 당신이 당신의 코드에서와 같이 여전히 정상적인 방법으로 배열 참조를 전달할 수 있습니다 -하지만 당신은 은 쓸 수 : 다시, 간단

Prints("cs150", "cs250", "cs270", "cs300", "cs350"); 

이 ... 별도의 변수를 선언보다 읽기 . PARAMS와

2

당신은 배열을 만들지 않고 메서드를 호출 할 수 있습니다 : PARAMS와

Prints("cs150", "cs250", "cs270") 
+5

글쎄, 명시 적으로 * 배열을 만들지 않고. 배열은 여전히 ​​만들어졌으며 암시 적으로 완료되었습니다. –

+0

@JonSkeet 사실이지만이 더러운 작업은 컴파일러에서 수행합니다. –

+0

글쎄, 아직 실행 시간에 완료된 작업이 있습니다. 이것이 내 요점입니다. 배열이 아직 만들어지고 채워지고 있습니다. 매우 성능에 민감한 코드에서는이를 피하기 위해 여러 가지 오버로드를하는 것이 좋습니다. –

4

는이처럼 메소드를 호출 할 수 있습니다 PARAMS없이

Prints("1", "2", "3", "4", "5"); 

, 당신은 할 수 없습니다.

또한 두 경우 모두 매개 변수로 배열과 메소드를 호출 할 수 있습니다 : 메소드를 호출 할 때입니다

Prints(new string[] { "1", "2", "3", "4", "5" }); 

이 PARAMS는 바로 가기를 사용할 수 있습니다.

0

PARAMS 키워드의 목적은

당신이 cretaed 한 라이브러리 나 방법을 소비 코더에 대한 경험을 코딩 단순화이다.

0

"params"키워드없이 인수를 전달하면 u는 array (array size)에 지정된 요소 만 전달할 수 있지만 "params"를 사용하면 array (array size)에 arrgument의 개수를 지정할 필요가 없습니다. 원하는대로 함수를 호출 할 때 필요한 인수를 여러 개 전달할 수 있습니다.

관련 문제