2013-01-09 3 views
1

가변 데이터 유형을 허용 할 수있는 메소드를 작성하는 방법이 있는지 알고 싶었습니다. 는 언젠가 나는 그런다양한 유형을 수용 할 수있는 메소드

SomeMethod(object); 
SomeMEthod(r,p,q); //Where r,p,q are integers 

무엇 이러한 방법의 서명의 모습으로 때로는 원시적 형 메소드에 객체를 전달해야? 당신이 다른 매개 변수의 유형을 치료해야하는 경우 좀 더 구체적으로해야합니다,

public void SomeMethod(params object[] list) 

과 : 당신이 방법에 사용 된 매개 변수의 종류에 상관하지 않는 경우

+1

이 매개 변수는 어떻게 사용됩니까? –

+2

그 데이터로 무엇을 할 계획입니까? 그게 * 정말로 * 답을 이끌어냅니다. 거의 모든 것이 '객체'라는 사실을 기억하십시오. 실제로 그 객체로 수행하는 작업에 따라 충분할 수 있습니다. – Servy

+0

Servy가 위의 주석에 동의하면, 원하는 것을 얻기위한 여러 옵션 (변수 params, 오버로딩, 일반 메소드)이 있지만 선택할 수있는 옵션은 전달할 수있는 여러 유형에 대해 어떻게 될지에 따라 달라집니다. – thudbutt

답변

2

실제 유형을 모르는 경우 실제로는 모든 유형이 될 수 있으므로 object 매개 변수는 참조 및 값 유형 모두에서 작동합니다.

예 : 이름은 같지만 서로 다른 서명을 가진 여러 방법을 통과 할 경우 과부하 방법도 있습니다

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

Method(1, 'a', "test"); 

MSDN documentation

4

, 당신은 간단하게 사용할 수 있습니다 강력하게 형식화 된 메소드의 여러 오버로드를 작성하십시오.

+1

복싱을 피하기 위해'public void SomeMethod (params T [] list)'를 선언 할 수 있었지만 (특정 유형으로 잠길 수 있음) –

1

당신은 매우 느리고 이상 유지할 수 있습니다 경우에도 방법은 어떤 유형의 수를 수용 할 경우

void Foo(params object[] arguments) 
{ 
    //Operate 
} 

은 위의 방법은 거의 모든 유형을 위해 작동하지만 값 유형을의 경우 처리가 필요한 상자에 넣어야합니다. 코드를 좀 더 효율적으로 만들고 싶다면 필요에 맞게 과부하를 작성하는 것이 좋습니다.

1

.

public void SomeMethod(object o) 
{ 
} 

public void SomeMethod(int r, int p, int q) 
{ 
} 
관련 문제