GetType ()은 기본 클래스에서 호출 될 때 가장 많이 파생 된 유형을 반환합니까?


118

GetType ()은 기본 클래스에서 호출 될 때 가장 많이 파생 된 유형을 반환합니까?

예:

public abstract class A
{
    private Type GetInfo()
    {
         return System.Attribute.GetCustomAttributes(this.GetType());
    }
}

public class B : A
{
   //Fields here have some custom attributes added to them
}

아니면 파생 클래스가 다음과 같이 구현해야하는 추상 메서드를 만들어야합니까?

public abstract class A
{
    protected abstract Type GetSubType();

    private Type GetInfo()
    {
         return System.Attribute.GetCustomAttributes(GetSubType());
    }
}

public class B : A
{
   //Fields here have some custom attributes added to them

   protected Type GetSubType()
   {
       return GetType();
   }
}

10
글쎄-해보셨어요?
BrokenGlass 2011

2
@BrokenGlass 일반적으로 나는 그렇게 할 것이지만 나는 컴퓨터에 있지 않습니다 ... 문제에 대한 해결책이 형성되기 시작했기 때문에 내 전화를 사용하여 게시물을 작성했으며 지금 알고 싶습니다! = P
Feisty Mango

답변:


133

GetType()실제 인스턴스화 된 유형을 반환합니다. 귀하의 경우에는, 당신이 호출하는 경우 GetType()의 예에 B, 그것은 반환 typeof(B)문제의 변수가 참조로 선언 된 경우에도, A.

당신의 GetSubType()방법에 대한 이유가 없습니다 .


그래도 그래? (추상) 수퍼 클래스에서 객체의 인스턴스를 전달하고 있는데 수신자는 수퍼 클래스 만 볼 수 있습니다. 핸들이 인스턴스가 아닌 것으로 정의 된 것을 항상 반환하지 않습니까? -아니면 내가 뭔가 빠졌나요?

HA 아 .. 차이 대 x.GetType () 대해서 typeof (X)를 사용하는 생각

22

GetType항상 실제로 인스턴스화 된 유형을 반환합니다. 즉 가장 파생 된 유형입니다. 이것은 당신이 자신 GetSubType처럼 행동 GetType하므로 불필요 하다는 것을 의미합니다 .

어떤 유형의 유형 정보를 정적으로 얻으려면을 사용할 수 있습니다 typeof(MyClass).

하지만 코드에 오류가 있습니다. System.Attribute.GetCustomAttributesreturns Attribute[]not Type.


7

GetType은 항상 실제 유형을 반환합니다.

JIT 및 CLR은 메서드를 사용하여 개체에 대한 정보를 보유하는 메모리에 Type 개체를 만들고 개체 및 컴파일에 대한 모든 액세스가이 Type 인스턴스를 통해 이루어 지기 때문에 그 이유는 .NET 프레임 워크 및 CLR 에서 깊습니다. .GetType.

자세한 내용은 Microsoft Press에서 "C #을 통한 CLR"책을 참조하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.