답변:
여기에 다른 대답은 두 가지 의미가 있습니다.
인스턴스인지 여부는 확인하려면 정확한 입력 한 후
if (c.GetType() == typeof(TForm))
갈 길입니다.
서브 클래스c 의 인스턴스 인지 TForm 서브 클래스 인지 알고 싶다면 is/ 를 사용하십시오 as.
if (c is TForm)
또는
TForm form = c as TForm;
if (form != null)
이러한 행동 중 실제로 원하는 행동이 무엇인지 마음에 새기십시오.
is및 as패턴 매칭으로 :if (x is TForm tf) {…
if(c is TFrom)
{
// Do Stuff
}
당신이 사용하려는 경우 또는 cA와 TForm다음 예를 사용합니다 :
var tForm = c as TForm;
if(tForm != null)
{
// c is of type TForm
}
두 번째 예 c는 유형이 TForm한 번 인지 확인하기 만하면됩니다 . 있는지이 경우 Whereis 당신이 선택하면 c유형 인 TForm다음 캐스트의 CLR은 별도의 검사를 받는다. 여기 참조 입니다.
편집 : Jon Skeet의 도난
에서 상속하는 클래스 c가 아닌지 확인 하려면 다음을 사용하십시오.TFormTForm
if(c.GetType() == typeof(TForm))
{
// Do stuff cause c is of type TForm and nothing else
}
예, "is"키워드 :
if (c is TForm)
{
...
}
MSDN에 대한 자세한 내용을 참조하십시오 : http://msdn.microsoft.com/en-us/library/scekt9xw(VS.80).aspx
객체가 주어진 유형과 호환되는지 확인합니다. 예를 들어 객체가 다음과 같은 문자열 유형과 호환되는지 확인할 수 있습니다.
또한 같은 맥락에서
Type.IsAssignableFrom(Type c)
"c와 현재 유형이 동일한 유형을 나타내거나 현재 유형이 c의 상속 계층 구조에 있거나 현재 유형이 c가 구현하는 인터페이스이거나 c가 일반 유형 매개 변수이고 현재 유형 인 경우 참 "c의 제약 조건 중 하나를 나타냅니다."
여기에서 : http://msdn.microsoft.com/en-us/library/system.type.isassignablefrom.aspx
typeof(Class).IsAssignableFrom(object.getType())Java instanceof연산자 와 유사합니다 .
T1.IsAssignableFrom(T2)반환 true상황에서 어디 as운영자 반환 null이 아닌 값, 그 형식의 인스턴스 주어진다.
bool isValid = c.GetType() == typeof(TForm) ? true : false;
또는 더 간단한
bool isValid = c.GetType() == typeof(TForm);
==. 특정 유형이 예를 들어 sealed클래스 에서 상속되지 않는다는 것을 알지 않는 한 상속을 지원하는 객체 또는 지향 언어 . 또한 : (정적 / 상수) 부울 값을 반환하는 삼항 연산자를 사용하면 성가 시게됩니다 switch.
instanceof와 C #is은 훨씬 더 나은 방법입니다.