문제

메소드에서 선택적 매개 변수를 선언 할 수 있습니까?

예를 들어 델파이에서는 다음과 같은 작업을 수행 할 수 있습니다.

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)

그런 다음 데이터를 처리합니다.

이를 처리하는 또 다른 방법은 오버로드/선택적 매개 변수를 사용하지 않고 대신해야 할 일에 따라 메소드의 이름을 지정하는 것입니다. 트레이드 오프가 잘못 보일 수 있지만 코드는 읽기가 더 쉬워 질 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top