문제

자의 말을 우리는 다음과 같은 방법을 선언:

Public Function MyMethod(ByVal param1 As Integer, _
    Optional ByVal param2 As Integer = 0, _
    Optional ByVal param3 As Integer = 1) As Integer

    Return param1 + param2 + param3
End Function

어떻게 VB.NET 을 선택 매개 변수 작업의 범위 내에서 CLR?은 선택 매개 변수 CLS?

도움이 되었습니까?

해결책

흥미롭게도,이 디컴파일된 C#code 을 통해 획득한 반사체.

public int MyMethod(int param1, 
                   [Optional, DefaultParameterValue(0)] int param2, 
                   [Optional, DefaultParameterValue(1)] int param3)
{
    return ((param1 + param2) + param3);
}

통지를 선택하고 DefaultParameterValue 특성이 있습니다.에 넣어보세요 C#방법이 있습니다.을 찾을 것입니다 당신은 여전히 필요한 값을 전달하는 방법입니다.VB 코드 그러나,그것의 설정으로 기본!그는 말했다,저는 개인적으로 사용하지 않는 기본에서도 VB 코드입니다.그것은 느낌이 다음과 같습니다.방법은 과부하지 않습니다.

기본값은 도움이지만,을 처리할 때는 엑셀 Interop 는 고통에서 나귀를 사용자에서는 C#.

다른 팁

일반적인 믿음과는 달리,선택 매개 변수가 나타나지 않을 것 CLS 준수합니다.(그러나,기본 확인에 대한 이 마크 어셈블리,종류 및 방법으로 모든 CLSCompliant 특성,True 로 설정됩니다.)

그래서 무엇이 이처럼에서 MSIL?

.method public static int32  MyMethod(int32 param1,
                                      [opt] int32 param2,
                                      [opt] int32 param3) cil managed
{
  .custom instance void [mscorlib]System.CLSCompliantAttribute::.ctor(bool) = ( 01 00 01 00 00 ) 
  .param [2] = int32(0x00000000)
  .param [3] = int32(0x00000001)
  // Code size       11 (0xb)
  .maxstack  2
  .locals init ([0] int32 MyMethod)
  IL_0000:  nop
  IL_0001:  ldarg.0
  IL_0002:  ldarg.1
  IL_0003:  add.ovf
  IL_0004:  ldarg.2
  IL_0005:  add.ovf
  IL_0006:  stloc.0
  IL_0007:  br.s       IL_0009
  IL_0009:  ldloc.0
  IL_000a:  ret
} // end of method Module1::MyMethod

참고[opt]에 표시 매개변수--MSIL 지원이 기본적으로하지 않고,모든 해킹.(과는 달리 MSIL 지원 VB 의 정적 키워드로,또 다른 주제에 모두 있습니다.)

그래서,왜 이러한에서는 C#?내가 응답할 것을,다른 것보다 나 수 있다는 추측을 수정의 부족 demand.내 자신의 취향에 항상 매개 변수를 지정하는 경우에도,그들이 선택--나에게는 코드는 보이는 청소기는 쉽게 읽을 수 있습니다.(있을 경우 생략 변수,나는 종종 첫 번째 과부하와 일치하는 눈에 보이는 서명-그것의 실패는 하나를 찾을 실현하는 선택적인 매개변수 참여하고 있습니다.)

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