문제

다음 컴파일러 경고를 받고 있습니다.

'Resources.Foo.GetType()' hides inherited member 'object.GetType()'. Use the new keyword if hiding was intended.    Resources.NET\Resources\Class1.cs   123 20  Resources

이 (매우 단순화 된) 코드의 경우 :

public interface IFoo
{
    int GetType();
    string GetDisplayName();
}

public class Foo : IFoo
{
    public int GetType() { return 3; }   *** Warning: points to here (line 123)***
    public string GetDisplayName() { return "Foo"; }
}

내가 얻지 못하는 것은 getDisplayName () 함수가 경고를받지 않는 이유입니다. 나는 분명히 무언가를 간과하고있다.

스택 오버 플로우를 뚫고이 오류를 구글링했으며 인터페이스가 아닌 클래스 상속에 적용되는 것 같습니다. 왜 이것이 인터페이스에 트리거되는지 (메소드를 가상으로 정의하는지) 왜 혼란스러워합니다.

통찰력에 미리 감사드립니다.

도움이 되었습니까?

해결책

그만큼 게티페 메소드는 System.Object 클래스는 프레임 워크의 모든 클래스의 궁극적 인 기본 클래스입니다.

이 방법은 그것을 얻는 데 사용됩니다 유형 런타임의 현재 인스턴스의 경우, 귀하는이를 무시하려고하지 않는다고 생각합니다 (int 리턴 유형이 있음).

방법의 이름을 getfootype 또는 다른 무언가로 바꾸거나 인터페이스를 구현할 것을 제안합니다. 명시 적으로 런타임 문제를 피하기 위해.

다른 팁

그것은 당신의 방법 숨기기를 나타냅니다 GetType 인터페이스가 아닌 객체에서. 클래스는 객체와 도구를 상속 받기 때문에 IFoo, 둘 다 a GetType 방법, 암시 적으로 인터페이스를 구현하면 숨 깁니다 GetType 물체에서 상속. 여전히 인터페이스 메소드를 호출하려는 경우 GetType, 당신은 그것을 구현할 수 있습니다 명시 적으로 대신 Foo:

int IFoo.GetType()
{
    return 3;
}

.NET의 모든 유형은 System.Object에서 파생됩니다.

System.Object 이미 GetType라는 메소드를 정의합니다. 수업에서 'gettype'를 정의하고 누군가가 수업의 객체를 만들면 system.object에서 제공하는 gettype 메소드를 호출 할 수 없습니다. 이것이 'GetType'이 System.Object에 정의 된 방법을 숨긴 경고를받는 이유입니다. system.object (또는 그 부모 클래스) 가이 메소드를 정의하지 않기 때문에 getDisplayName에 대해이 경고를받지 못합니다.

일반적으로 .NET 개발자가 getType 메소드 호출이 System.Object 구현을 참조하기 위해 메소드 이름을 다른 것으로 변경하는 것이 좋습니다.

인터페이스의 구현에 대해 불평하는 것이 아니라 이미 "Object"에있는 gettype ()의 상환 (Foo가 자동으로 상속되는 객체”에 대한 상환. "Object"에는 getDisplayName 메소드가 없으므로 해당 불만이 제기되지 않습니다. 권장하지는 않지만 객체를 숨기고 싶다면 메소드의 이름을 바꾸거나 "새"수정자를 추가하십시오.

System.Object 클래스는 이미 getType () 메소드가 있습니다

이 문제를 해결하려면 새로 또는 재정의 키워드를 사용해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top