C #에서 myCustomer.GetType ()과 typeof (Customer)의 차이점은 무엇입니까?
내가 유지하는 일부 코드에서 둘 다 수행하는 것을 보았지만 차이점을 모릅니다. 하나있어?
myCustomer가 Customer의 인스턴스임을 추가하겠습니다.
두 가지 결과는 귀하의 경우에 정확히 동일합니다. 에서 파생되는 사용자 지정 유형이됩니다 System.Type
. 여기서 유일한 실제 차이점은 클래스의 인스턴스에서 유형을 얻으려면 GetType
. 인스턴스가 없지만 유형 이름을 알고있는 경우 ( System.Type
검사하거나 비교할 실제 값만 필요함 ) typeof
.
중요한 차이점
편집 : 컴파일 타임에 해결되는 GetType
동안 호출이 런타임에 해결 된다는 것을 추가하겠습니다 typeof
.
GetType ()은 런타임에 개체 참조 의 실제 유형 을 찾는 데 사용됩니다 . 이것은 상속 때문에 개체를 참조하는 변수의 유형과 다를 수 있습니다. typeof ()는 지정된 정확한 유형이며 컴파일 타임에 결정되는 유형 리터럴을 만듭니다.
예, 고객으로부터 상속 된 유형이있는 경우 차이가 있습니다.
class VipCustomer : Customer
{
.....
}
static void Main()
{
Customer c = new VipCustomer();
c.GetType(); // returns typeof(VipCustomer)
}
첫 번째에는 실제 인스턴스 (예 : myCustomer)가 필요하고 두 번째에는 필요하지 않습니다.
typeof (foo)는 컴파일 타임에 상수로 변환됩니다. foo.GetType ()은 런타임에 발생합니다.
typeof (foo)는 또한 해당 유형의 상수 (예 : foo)로 직접 변환하므로 실패합니다.
public class foo
{
}
public class bar : foo
{
}
bar myBar = new bar();
// Would fail, even though bar is a child of foo.
if (myBar.getType == typeof(foo))
// However this Would work
if (myBar is foo)
typeof는 컴파일 타임에 실행되고 GetType은 런타임에 실행됩니다. 이것이이 두 가지 방법이 다른 점입니다. 그렇기 때문에 유형 계층을 다룰 때 GetType을 실행하여 유형의 정확한 유형 이름을 찾을 수 있습니다.
public Type WhoAreYou(Base base)
{
base.GetType();
}
typeof 연산자는 유형을 매개 변수로 사용합니다. 컴파일 타임에 해결됩니다. GetType 메서드는 개체에서 호출되며 런타임에 확인됩니다. 첫 번째는 알려진 유형을 사용해야 할 때 사용되며 두 번째는 객체가 무엇인지 모를 때 객체의 유형을 가져 오는 것입니다.
class BaseClass
{ }
class DerivedClass : BaseClass
{ }
class FinalClass
{
static void RevealType(BaseClass baseCla)
{
Console.WriteLine(typeof(BaseClass)); // compile time
Console.WriteLine(baseCla.GetType()); // run time
}
static void Main(string[] str)
{
RevealType(new BaseClass());
Console.ReadLine();
}
}
// ********* By Praveen Kumar Srivastava
'IT TIP' 카테고리의 다른 글
첫 번째 Heroku 배포 실패 ʻerror code = H10` (0) | 2020.10.22 |
---|---|
Laravel 5에 외부 CSS 및 JS 파일을 포함하는 방법 (0) | 2020.10.22 |
Django 디버그는 페이지의 모든 변수를 표시합니다. (0) | 2020.10.22 |
인터페이스에서 자바 캐스팅 (0) | 2020.10.22 |
Cloudfront에서 정적으로 호스팅되는 웹 사이트의 하위 디렉터리에 대한 기본 루트 개체를 어떻게 설정합니까? (0) | 2020.10.22 |