Pergunta

Estou recebendo o seguinte aviso do compilador:

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

para este código (muito simplificado):

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"; }
}

Note, o que eu não entendo é por que a função GetDisplayName () não recebe um aviso. Estou com vista claramente algo.

Eu picado em torno de estouro de pilha e pesquisei este erro e parece aplicar-se a herança de classe, não interfaces. Estou realmente confuso por que isso seria acionado para a interface (que define os seus métodos como virtual).

Agradecemos antecipadamente para o insight.

Foi útil?

Solução

O método GetType é definida na System.Object classe, que é a classe base de todas as classes do quadro.

Este método é usado para obter o Digite de a instância atual em tempo de execução, e eu acho que você não está com a intenção de substituí-lo (você tem um tipo int retorno).

Eu sugiro que você mudar o nome do método para GetFooType ou outra coisa, ou implementar a interface explicitamente a problemas de evitar tempo de execução.

Outras dicas

Trata-se de seu esconderijo método GetType do objeto, e não a partir de sua interface. Desde seus herda classe de objeto e implementos IFoo, e ambos fornecem um método GetType, pela implicitamente que implementa a interface que você irá esconder o GetType herdado do objeto. Se você ainda quer que seu método de interface para ser chamado GetType, você pode implementá-lo explicitamente em vez de Foo:

int IFoo.GetType()
{
    return 3;
}

Todos os tipos do .NET derivam de System.Object.

System.Object já define um método chamado GetType. Se você definir outro método 'GetType' em sua classe e se alguém cria um objeto de sua classe, eles nunca pode chamar o método GetType disponibilizados por System.Object. Esta é a razão que você está recebendo o aviso de que os couros 'GetType' O método definido no System.Object. Você não receber este aviso para GetDisplayName porque System.Object (ou para essa matéria qualquer classe pai) não define este método.

Eu recomendo que você mudar o seu nome de método para outra coisa como geralmente desenvolvedores .NET esperar GetType chamada de método para se referir a implementação System.Object.

Não reclamando sobre a sua implementação da interface, mas sim a sua reimplementação de GetType () que já está no "objeto" - a partir do qual Foo herda automaticamente. "Objeto" não tem um método GetDisplayName e, portanto, não levanta qualquer queixa por isso. Tente mudar o nome do método ou adicionar no "novo" modificador se você realmente deseja que ele não é recomendado hide Object.GetType ().

classe System.Object já tem o método GetType ()

você deve usar a palavra-chave novo ou de substituição para resolver este problema

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top