2011-01-24 4 views

답변

10

intlong에 할당하면 결과가 암시 적으로 변환됩니다. longOne은 실제 크기가 인데 (예 : 1L으로 초기화 한 경우) 드리프트가 발생하는 경우 long으로 가장하여 int이 아닙니다. 인

, int (또는 Int32) 및 long (또는 Int64)의 상속 또는 구현의 관점에서 관련이없는; 둘 다 정수형이므로 변환 가능합니다.

2

을 한 경우에

예를 들어 다음 메소드는 true를 반환 :

사실 C와 현재 Type이 같은 유형을 표시하는 경우 또는 현재 Type이 c의 상속 계층 구조에 있거나 현재 Type이 구현하는 인터페이스이거나 c가 제네릭 형식 매개 변수이고 현재 Type이 c의 제약 조건 중 하나를 나타내는 경우에 발생합니다. 조건이 true가 아닌 경우, 또는 c가 null의 경우는 false

마찬가지로 @BoltClock은 암묵적인 변환이라고 말합니다.

+1

이 항목은 항상 나를 혼란스럽게합니다. 나는 항상 체크 할 방법을 잊어 버린다. 여기에 남겨주세요 :'var isSameOrChild = baseType.IsAssignableFrom (otherType)' –

3

IsAssignableFrom은 유형이 동일하거나 유형이 구현하거나 상속하는 경우 true를 반환합니다.

longint을 상속하지 않으므로 false를 반환합니다.

int 값을 long에 할당하면 이는 단지 할당이 아닙니다. 컴파일러는 int 값을 long 값으로 변환하는 코드도 자동으로 추가합니다.

3

Type.IsAssignableFrom은 .NET Framework 기능이므로 int에서 long에 할당하는 것은 C# 언어입니다. 생성 된 일리노이를 살펴보면 형식 변환 지침이 표시됩니다. CLR 규칙이 C#과 다를 수있는 곳이 많이 있습니다. 한 가지 더 많은 예가 MethodBase.Invoke의 오버로드 해결과 C# 컴파일러에서 수행 된 것입니다.

관련 문제