sirve que propiedades programacion para modificadores modificador herencia clase autoimplementadas acceso abstracta c# static resharper

propiedades - que es override en c#



¿Usar el miembro estático de una clase en un tipo derivado? (4)

Usando Resharper 4.1, me encontré con esta advertencia interesante: "Acceso a un miembro estático de un tipo a través de un tipo derivado". Aquí hay una muestra de código de dónde ocurre esto:

class A { public static void SomethingStatic() { //[do that thing you do...] } } class B : A { } class SampleUsage { public static void Usage() { B.SomethingStatic(); // <-- Resharper warning occurs here } }

¿Alguien sabe qué problemas hay (si hay alguno) al hacer uso de los miembros estáticos de A a través de B?


No es una advertencia, por lo general, solo una sugerencia. Estás creando una dependencia en algo innecesariamente.

Supongamos que luego decide que B no necesita heredar A. Si sigue los consejos de Resharper, no necesitará modificar esa línea de código.


Sí, he visto esto también, siempre he supuesto que solo me estaba advirtiendo porque era innecesario. A.SomethingStatic(); haría lo mismo


Un lugar donde podría ser engañoso es cuando la estática es un método de fábrica, por ejemplo, la clase WebRequest tiene un método de fábrica Create que permitiría escribir este tipo de código si se accede a través de una clase derivada.

var request = (FtpWebRequest)HttpWebRequest.Create("ftp://ftp.example.com");

Aquí la request es de tipo FtpWebRequest pero es confusa porque parece que se creó a partir de una HttpWebRequest (una clase de hermanos) aunque el método Create realidad está definido en WebRequest (la clase base). El siguiente código es idéntico en significado, pero es más claro:

var request = (FtpWebRequest)WebRequest.Create("ftp://ftp.example.com");

En última instancia, no hay un gran problema para acceder a una estática a través de un tipo derivado, pero el código a menudo es más claro al no hacerlo.


B.SomethingStatic() hace la afirmación de que SomethingStatic es miembro de B Esto no es verdad. SomethingStatic es inequívocamente un miembro de A El hecho de que se puede acceder sin reservas a los miembros de B (como si fuera un miembro de B ) es una cuestión de conveniencia. El hecho de que es accesible cuando está calificado con B es, IMO, un error.