2009-10-27 5 views
0
이 방법 선언으로

에게 (더 오버로드 없음) :C# 번호 리터럴

void Method(double d) 
{ 
    // do something with d 
} 

void Main() 
{ 
    Method(1); 
    Method(1.0); 
} 

또는 컴파일러가 자동으로 리터럴 INT 변환 않습니다 사이의 런타임시 (성능) 차이가 있습니다 더블?

답변

2

방금 ​​해 보았습니다. C# 3.0에서는 첫 번째 호출에 대해 다음 IL을 생성합니다.

ldc.r8 1. 
call instance void ConsoleApplication1.Program::Method(float64) 

따라서 런타임 변환이 없습니다.

7

컴파일러는 암시 적으로 int를 double로 변환합니다.

페널티가 없습니다.

+0

다음과 같이 추가하십시오 : 반사경을 사용하여 결과 IL 또는 C#으로 다시 변환했을 때의 모습을 볼 수 있습니다. – Joey