Pregunta

Me estoy haciendo la siguiente advertencia del 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 (muy simplificada):

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

Tenga en cuenta, lo que no entiendo es por qué la función GetDisplayName () no recibe una advertencia. Que se me escapa claramente algo.

He hurgó desbordamiento de pila y buscado en Google este error y parece que se aplican a la herencia de clases, no interfaces. Estoy muy confundido por qué esto podría ser desencadenada por la interfaz (que define sus métodos como virtuales).

Gracias de antemano por la información.

¿Fue útil?

Solución

El GetType método se define en el System.Object clase, que es la clase base última de todas las clases del marco.

Este método se utiliza para obtener la la instancia actual en tiempo de ejecución, y creo que no tienen la intención de anularlo (que tiene un tipo de retorno int).

Le sugiero que cambiar el nombre del método para GetFooType o alguna otra cosa, o que implemente la interfaz explícitamente para evitar problemas de tiempo de ejecución.

Otros consejos

Se refiere a su escondite método GetType del objeto, no de su interfaz. Debido a que su clase de objeto hereda e implementa IFoo, y ambos proporcionan un método GetType, por implícitamente que implementa la interfaz va a ocultar el GetType heredado de objeto. Si todavía quiere que su método de interfaz para ser llamado GetType, puede implementarlo explícitamente en lugar de Foo:

int IFoo.GetType()
{
    return 3;
}

Todos los tipos de .NET derivan de System.Object.

System.Object ya define un método llamado GetType. Si define otro método 'GetType' en su clase y si alguien crea un objeto de su clase, que nunca puede llamar al método GetType puesto a disposición por System.Object. Esta es la razón por la que está recibiendo la advertencia de que 'GetType' esconde el método definido en System.Object. Usted no recibe esta advertencia para GetDisplayName porque System.Object (o de hecho cualquier clase padre) no define este método.

Yo recomendaría que cambie su nombre de método a algo más general, los desarrolladores de .NET esperan GetType llamada a un método para referirse a la aplicación System.Object.

No se quejan de que su implementación de la interfaz, sino más bien su reimplementación de GetType () que ya está en "objeto" - de la que Foo hereda automáticamente. "Objeto" no tiene un método GetDisplayName y por lo tanto no plantea ninguna queja para que uno. Trate de cambiar el nombre del método o la adición en el "nuevo" modificador si realmente desea ocultar object.GetType (), aunque no es recomendable.

clase System.Object ya tiene el método GetType ()

se debe utilizar la nueva palabra clave o anulación de resolver este problema

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top