문서를 영문으로 보려면 영문 확인란을 선택하세요. 마우스 포인터를 텍스트 위로 이동시켜 팝업 창에서 영문 텍스트를 표시할 수도 있습니다.
번역
영문
이 설명서는 보관되지만 유지 되지 않습니다.

매개 변수 개수가 일정하지 않은 멤버

배열은 다양한 수의 매개 변수를 멤버로 전달하는 데 사용됩니다. C#와 같은 일부 언어는 가변 인수를 전달하는 데 사용되는 배열을 데코레이팅하는 키워드를 제공합니다. 키워드를 제공하지 않는 언어의 경우 ParamArrayAttribute 특성이 이 기능을 제공합니다. 키워드와 특성은 멤버 시그니처의 마지막 매개 변수에 영향을 줍니다. 이 매개 변수는 1차원 배열이어야 합니다.

다음 코드 예제에서는 다양한 수의 매개 변수를 사용하는 메서드를 정의하고 호출하는 방법을 보여 줍니다. DemonstrateVariableParameters 메서드에서 UseVariableParameters를 호출한 후 인수를 배열에 삽입합니다.



public static void UseVariableParameters(params int[] list) 
{
     for ( int i = 0 ; i < list.Length ; i++ )
     {
        Console.WriteLine(list[i]);
     }
     Console.WriteLine();
}

public static void DemonstrateVariableParameters()
{
    Manager.UseVariableParameters(1,2,3,4,5);
}



다음 지침은 매개 변수에 다양한 수의 배열을 사용해야 하는 경우를 알 수 있도록 도와줍니다.

최종 사용자가 적은 수의 요소를 전달하는 경우 params 키워드를 배열 매개 변수에 추가할 수 있습니다.

개발자가 일반 시나리오에서 많은 요소를 전달하는 경우, 개발자가 많은 수의 개체를 인라인으로 전달하므로 params 키워드가 그다지 유용하지 않습니다.

호출자가 일반적으로 배열에 이미 입력을 삽입한 경우 params 배열을 사용하지 않습니다.

예를 들어, 바이트 데이터는 일반적으로 바이트 배열에서 저장되고 조작됩니다. 개발자는 일반적으로 바이트 배열에 아직 저장되지 않은 개별 바이트에 대한 작업을 수행하므로 params 키워드를 바이트 배열 매개 변수에 추가하는 것으로 일반 시나리오를 설명할 수는 없습니다.

params 배열 매개 변수를 사용하는 멤버가 배열을 수정하는 경우 params 배열을 사용하지 않습니다.

CLR(공용 언어 런타임)에서 임시 배열 개체를 만들었을 수 있습니다. 메서드가 임시 배열을 수정하는 경우 호출자는 해당 수정 사항을 사용할 수 없습니다.

복잡한 오버로드에서는 params 키워드를 사용할 수 없지만 단순 오버로드에서는 사용할 수 있습니다.

params 배열이 모든 오버로드에 있지 않고 하나의 오버로드에만 있더라도 개발자는 이점을 얻을 수 있습니다.

매개 변수에서 params 키워드를 사용할 수 있도록 지시하지 않습니다.

즉, 가능한 경우 마지막으로 지정하는 매개 변수는 배열 매개 변수여야 합니다. 다음 코드 예제에서는 잘못된 매개 변수 순서를 보여 줍니다.


Overloads Public Function Add (i as Integer,j as Integer, numberBase as Int16) _
    as Integer



public int Add (int i,int j, short numberBase) 



int Add (int i,int j, short numberBase)



Overloads Public Function Add (i as Integer, j as Integer, k as Integer, _
    numberBase as int16) as Integer



public int Add (int i, int j, int k, short numberBase) 



int Add (int i, int j, int k, short numberBase)



' Can't use params array.
Overloads Public Function Add (numbers() as Integer, numberBase as Int16) _
    as Integer



// Can't use params array.
public int Add (int [] numbers, short numberBase) 



// Can't use params array.
int Add (array<int>^ numbers, short numberBase)


이 매개 변수는 다음과 같은 순서로 변경해야 합니다.


Overloads Public Function Add (numberBase as Int16, i as Integer,j as Integer) _
    as Integer



public int Add (short numberBase, int i,int j)



int Add (short numberBase, int i,int j)



Overloads Public Function Add (numberBase as Int16, i as Integer, _
    j as Integer, k as Integer) as Integer



public int Add (short numberBase, int i, int j, int k) 



int Add (short numberBase, int i, int j, int k)



' Can use params array.
Overloads Public Function Add (numberBase as Int16, _
    ParamArray numbers() as Integer) as Integer



// Can use params array.
public int Add (short numberBase, params int [] numbers) 



// Can use params array.
int Add (short numberBase, ... array<int>^ numbers)


성능이 매우 중요한 API에 적은 수의 인수를 사용하는 호출에 대한 특수 오버로드와 코드 경로를 제공할 수 있습니다.

이 지침을 따르면 적은 수의 인수를 사용하여 멤버를 호출할 때 배열이 만들어지지 않게 할 수 있습니다. 매개 변수 이름은 숫자 접미사가 뒤에 오는 배열 매개 변수의 단수 형식이어야 합니다. 다음 코드 예제에서는 이 지침을 따르는 멤버 시그니처를 보여 줍니다.


public static void WriteLine(
    string format, 
    object arg0, 
    object arg1, 
    object arg2
)


null(Visual Basic의 경우 Nothing)을 params 배열 인수로 전달할 수 있습니다.

멤버는 null 배열을 확인한 후 처리해야 합니다.

줄임표라고도 하는 varargs 메서드는 사용하지 않습니다.

varargs 호출 규칙은 CLS를 준수하지 않으므로 public 멤버에서 사용해서는 안 되며 내부적으로만 사용할 수 있습니다.

Portions Copyright 2005 Microsoft Corporation. All rights reserved.

Portions Copyright Addison-Wesley Corporation. All rights reserved.

디자인 지침에 자세한 내용은 참조를 "Framework 디자인 지침: 규칙, 숙어, 및 재사용에 대 한 패턴입니다.NET 라이브러리"도 서 Krzysztof Cwalina와 Brad Abrams, 게시 Addison-wesley, 2005.

표시: