언제 어디서 GetType () 또는 typeof ()를 사용합니까?
이 질문에 이미 답변이 있습니다.
이것이 작동하는 이유
if (mycontrol.GetType() == typeof(TextBox))
{}
그리고 이것은하지 않습니까?
Type tp = typeof(mycontrol);
그러나 이것은 작동합니다
Type tp = mycontrol.GetType();
나는 is
유형을 확인 하기 위해 연산자를 사용 하지만 내가 사용 typeof()
하고GetType()
언제 어디서 사용 GetType()
또는 typeof()
?
typeof
컴파일 타임에 알려진 유형 (또는 최소한 일반 유형 매개 변수) 을 가져 오는 연산자 입니다. 의 피연산자 typeof
는 항상 유형 또는 유형 매개 변수의 이름이며 값 (예 : 변수)이있는 표현식이 아닙니다 . 자세한 내용은 C # 언어 사양 을 참조하세요.
GetType()
개체의 실행 시간 유형 을 가져 오기 위해 개별 개체에 대해 호출하는 메서드 입니다.
(하위 클래스의 인스턴스가 아닌) 정확히 인스턴스 만 원하지 않는 한 TextBox
일반적으로 다음을 사용합니다.
if (myControl is TextBox)
{
// Whatever
}
또는
TextBox tb = myControl as TextBox;
if (tb != null)
{
// Use tb
}
typeof
컴파일 타임에 알려진 유형 또는 제네릭 유형 매개 변수의 이름에 적용됩니다. GetType
런타임에 객체에서 호출됩니다. 두 경우 모두 결과는 유형 System.Type
에 대한 메타 정보를 포함 하는 유형의 객체입니다 .
당신이 가지고 있다면
string s = "hello";
이 두 줄은 유효합니다
Type t1 = typeof(string);
Type t2 = s.GetType();
t1 == t2 ==> true
그러나
object obj = "hello";
이 두 줄은 유효합니다
Type t1 = typeof(object); // ==> object
Type t2 = obj.GetType(); // ==> string!
t1 == t2 ==> false
즉, 변수의 컴파일 시간 유형 (정적 유형)이에서 obj
참조하는 객체의 런타임 유형과 동일하지 않습니다 obj
.
테스트 유형
그러나, 당신은 단지 알고 싶은 여부를 경우 mycontrol
하는 TextBox
당신은 테스트를 간단하게 할 수있는
if (mycontrol is TextBox)
이것은 완전히 동일하지는 않습니다.
if (mycontrol.GetType() == typeof(TextBox))
mycontrol
에서 파생 된 유형을 가질 수 있기 때문 입니다 TextBox
. 이 경우 첫 번째 비교는 산출 true
되고 두 번째 비교 는 false
! 에서 파생 된 컨트롤 TextBox
이 TextBox
가진 모든 것을 상속 하고 아마도 더 많은 것을 추가하고 따라서 할당과 호환되기 때문에 대부분의 경우 첫 번째 및 더 쉬운 변형은 괜찮습니다 TextBox
.
public class MySpecializedTextBox : TextBox
{
}
MySpecializedTextBox specialized = new MySpecializedTextBox();
if (specialized is TextBox) ==> true
if (specialized.GetType() == typeof(TextBox)) ==> false
주조
다음 테스트와 캐스트가 있고 T가 nullable이면 ...
if (obj is T) {
T x = (T)obj; // The casting tests, whether obj is T again!
...
}
...로 변경할 수 있습니다.
T x = obj as T;
if (x != null) {
...
}
값이 주어진 유형인지, 캐스팅 (이 같은 테스트를 다시 포함)인지 테스트하는 것은 긴 상속 체인의 경우 시간이 많이 걸릴 수 있습니다. as
연산자를 사용하고 테스트를 null
수행하면 성능이 향상됩니다.
C # 7.0부터는 패턴 일치를 사용하여 코드를 단순화 할 수 있습니다.
if (obj is T t) {
// t is a variable of type T having a non-null value.
...
}
Btw.: this works for value types as well. Very handy for testing and unboxing.
typeOf is a C# keyword that is used when you have the name of the class. It is calculated at compile time and thus cannot be used on an instance, which is created at runtime. GetType is a method of the object class that can be used on an instance.
You may find it easier to use the is
keyword:
if (mycontrol is TextBox)
참고URL : https://stackoverflow.com/questions/11312111/when-and-where-to-use-gettype-or-typeof
'developer tip' 카테고리의 다른 글
Ruby에서 <<는 무엇을 의미합니까? (0) | 2020.12.10 |
---|---|
int를 Android에서 문자열로 (0) | 2020.12.10 |
Go에서 파일 길이를 얻는 방법은 무엇입니까? (0) | 2020.12.10 |
UITextField에서 자리 표시 자 텍스트의 기본 색상은 무엇입니까? (0) | 2020.12.10 |
Jupyter 노트북에서 목록을 테이블로 출력하려면 어떻게해야합니까? (0) | 2020.12.10 |