다음 코드를 고려하십시오왜 C# 컴파일러는 반환 값 유형과 변수 유형이 일치하지 않습니까?
static void Main()
{
dynamic a = 1;
int b = OneMethod(a);
}
private static string OneMethod(int number)
{
return "";
}
이 type of b
및 return type of OneMethod
이 일치하지 않는주의하시기 바랍니다. 그럼에도 불구하고 런타임시 예외를 생성하고 throw합니다. 제 질문은 컴파일러가 왜 이것을 허용합니까? 아니면 이것의 철학은 무엇입니까?
이유는 Compiler does not know which OneMethod would be called, because a is dynamic.
일 수 있습니다. 그러나 왜 단지 OneMethod
인지 알 수 없습니다. 런타임에는 예외가 반드시있을 것입니다.
[MSDN] (http://msdn.microsoft.com/en-us/library/dd264741.aspx) (첫 번째 문장) 읽기 : _ "동적 유형은 발생하는 작업을 ** 컴파일을 우회 할 수있게합니다 런타임 유형 검사 ** 대신 런타임에 이러한 작업이 해결됩니다. "_ –
@TimSchmelter 감사합니다. 사실 MSDN에서 검색하지 않았습니다. 그러나 나의 질문은 이것 뒤에 이유 (또는 철학)가 무엇인가라는 것이었다. – serdar
당신은 E.Lippert에게 물어봐야 할 것 같습니다. "동적 인 경우 컴파일러가 더 이상 변수 또는 관련된 표현식을 검사 할 책임이 없습니다"와 같은 답변을 할 것입니다. –