문제
메소드에서 선택적 매개 변수를 선언 할 수 있습니까?
예를 들어 델파이에서는 다음과 같은 작업을 수행 할 수 있습니다.
procedure Test(p1:integer;p2:integer;p3:integer = 2;p4:integer = 4)
이 기능을 호출 할 때 4 개의 매개 변수 또는 두 개의 매개 변수로 호출 할 수 있습니다.
Test(2,3); //p3 = 2,p4 = 4.
Test(2,3,4,5); //p3 = 4,p4 = 5;
C#에서 어떻게 가능합니까?
해결책
C# 1 ~ 3에서는 이것이 불가능한 것이 두려워하지만, 좋은 소식은 그것이 많은 기능 이었기 때문에 (확실히 그것을 보지 못할 사람들이 있지만) 마이크로 소프트는 마침내 추가하기로 결정했다는 것입니다. C# 4로.
C# 4 구문은 다음과 같습니다.
public static void SayHello(string s = "Hello World!")
{
Console.WriteLine(s);
}
용법:
SayHello(); // Prints "Hello World!"
SayHello("Hello."); // Prints "Hello."
SayHello(s: "Hello."); // Prints "Hello."
(마지막 예제는 명명 된 인수를 사용합니다.이 경우 실제로는 필요하지 않지만 여러 선택적 매개 변수가있을 때 도움이됩니다.)
그 주제에 대해 더 많이 읽을 수 있습니다 이 블로그 게시물.
다른 팁
당신은 기다려야 할 것입니다 C# 4.0, 옵션 매개 변수를 지원하거나 표준 과부하 메커니즘을 사용합니다.
void Test(int p1, int p2, int p3, int p4)
{ }
void Test(int p1, int p2)
{
Test(p1, p2, 2, 4);
}
C# 4.0에서는 가능하지만, 출시 될 때까지 과부하 된 버전의 메소드를 만들어 주변에서 작업 할 수 있습니다.
public void MyMethod( int a, int b, int c )
{
...
}
public void MyMethod( int a, int b)
{
MyMethod(a, b, 4);
}
변수 인수를 사용할 수 있습니다
Params 키워드를 사용하십시오.
void paramsExample(params int[] argsRest)
{
if(argsRest.Length == 2) then...
else if(argsRest.Length == 4) then...
else error...
}
using System;
using System.Runtime.InteropServices;
public static void SayHello([Optional][DefaultParameterValue("Hello Universe!")] string s)
{
Console.WriteLine(s);
}
완료! :)
당신은 아직 그렇게 할 수 없습니다. 나는 그것이 A라고 생각합니다 C# 4.0의 기능.
매개 변수를 작업으로 사용할 수 있지만 일부 언어가 기본 매개 변수를 처리하는 방식이 아니라 순차적으로 만 사용할 수 있습니다.
당신은 이와 같은 과부하를 사용합니다
Test(int p1, int p2)
Test(int p1, int p2, int p3)
이와 같은 개인 방법을 호출하게 할 수 있습니다.
Test(int[] ps)
그런 다음 데이터를 처리합니다.
이를 처리하는 또 다른 방법은 오버로드/선택적 매개 변수를 사용하지 않고 대신해야 할 일에 따라 메소드의 이름을 지정하는 것입니다. 트레이드 오프가 잘못 보일 수 있지만 코드는 읽기가 더 쉬워 질 것입니다.