IT TIP

C #에서 myCustomer.GetType ()과 typeof (Customer)의 차이점은 무엇입니까?

itqueen 2020. 10. 22. 23:48
반응형

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 

참고 URL : https://stackoverflow.com/questions/139607/what-is-the-difference-between-mycustomer-gettype-and-typeofcustomer-in-c

반응형