출처 : http://msdn.microsoft.com/ko-kr/library/ms228391(v=vs.90).aspx
C#에서는 메서드를 선언할 때 params 키워드를 지정하여 개수가 가변적인 매개 변수를 메서드에 전달할 수 있습니다. 인수 목록에는 일반적인 매개 변수도 포함될 수 있지만params 키워드를 사용하여 선언한 매개 변수는 목록의 맨 마지막에 사용해야 합니다. 그 형태는 가변 길이 배열과 같으며 params 매개 변수는 각 메서드에서 하나만 사용할 수 있습니다.
컴파일러에서 메서드 호출을 확인하려 시도할 때는 해당 인수 목록이 호출된 메서드와 일치하는 메서드를 조회합니다. 인수 목록과 일치하는 메서드 오버로드를 찾을 수 없지만 적절한 형식의 params 매개 변수와 일치하는 버전이 있는 경우 배열에 인수를 추가로 배치하여 이 메서드를 호출합니다.
다음 예제에서는 이러한 과정을 보여 줍니다.
class TestParams { private static void Average(string title, params int[] values) { int sum = 0; System.Console.Write("Average of {0} (", title); for (int i = 0; i < values.Length; i++) { sum += values[i]; System.Console.Write(values[i] + ", "); } System.Console.WriteLine("): {0}", (float)sum/values.Length); } static void Main() { Average ("List One", 5, 10, 15); Average ("List Two", 5, 10, 15, 20, 25, 30); } }
위 예제에서 Average 메서드는 정수 배열 형식의 params 매개 변수를 사용하여 선언되므로 이 메서드를 호출할 때 사용할 수 있는 인수의 수에는 제한이 없습니다. 그 출력은 다음과 같습니다.
Average of List One (5, 10, 15, ): 10
Average of List Two (5, 10, 15, 20, 25, 30, ): 17.5
다양한 형식의 결정되지 않은 매개 변수를 사용할 수 있도록 하려면 Object 형식의 params 매개 변수를 지정합니다.
반응형
'C#' 카테고리의 다른 글
[C#] DataTable.Copy() 와 DataTable.Clone()의 차이 (0) | 2016.09.19 |
---|---|
[C#][MSDN] C# Event 발행자(publisher)와 구독자(subscriber) 방식, 옵저버 패턴에 대해 (0) | 2016.08.21 |
[C#] WeakReference (약한 참조) (0) | 2016.08.21 |
[스크랩][C#] NULL 처리된 객체가 Garbage collector에 의해 수집되지 않는 현상 (0) | 2016.08.21 |
[C#][Unity3D] List<T> Remove 사용 주의사항 (1) | 2013.03.07 |
[C#] Json 파서 구현 시 엑셀 파일 로딩에 대해 (0) | 2013.02.07 |
C# char, sbyte (0) | 2013.01.17 |
C# Delegate 그리고 Event (1) | 2013.01.08 |
[C#] ArrayList 와 List 차이 (0) | 2012.09.27 |
[C#] ArrayList 메모리 구조 (0) | 2012.09.27 |