나는 이해하지 못하고 답을 찾을 수없는 몇 가지 이상한 행동을 발견했습니다. 나에게변수의 범위가 범위를 벗어났습니다
private void SomeMethod(BaseClass obj)
{
if (obj.GetType() == typeof(SubClass1))
{
var variable = (SubClass1) obj;
}
else if (obj.GetType() == typeof(SubClass2))
{
var variable = (SubClass2) obj;
}
}
이 variable
의 두 선언이 다른 범위에있는 것 같다 그 var
이의 실제 유형에 따라 SubClass1
또는 SubClass2
중 하나 될 것입니다 : BaseClass
에 SubClass1
및 SubClass2
되는 서브 클래스로 나는 방법을 메서드에 obj
이 전송되었습니다.
그러나이 메서드를 SubClass2
형식의 개체로 호출하면 else 절의 BaseClass
에서 SubClass2
까지의 형 변환이 항상 null을 반환합니다.
나는 내가 variable
선언의에 도달하기 전에, 즉 방법을 입력하는 즉시, variable
가 ofcource가 null obj
반환의 캐스팅 이유를하다 타입 SubClass1
의 것을 볼 코드를 디버깅
누구든지 왜 variable
에 선언되기 전에 유형이 있는지 말해 줄 수 있습니까?
'그러나이 메소드를 SubClass2 유형의 객체로 호출하면 else 절의 BaseClass에서 SubClass2로 캐스트하면 항상 null이 반환됩니다. '불가능합니다. 그 상황에서 결코 "null"이 될 수 없다. – Servy
코드가 아니라 디버거 동작입니다. 이들은 서로 다른 범위에있는 서로 다른 유형의 두 개의 개별 변수입니다. 귀하의 코드는 컴파일되지 않았을 것입니다. 다른 일이 벌어지고있다. – dasblinkenlight
@Igor 형식을 먼저 확인하면 코드를 캐스팅하지 못할 수 있습니다. – Servy