La static
palabra clave en un miembro en muchos idiomas significa que no debe crear una instancia de esa clase para poder tener acceso a ese miembro. Sin embargo, no veo ninguna justificación para hacer una clase completa static
. ¿Por qué y cuándo debo hacer una clase static
?
¿Qué beneficios obtengo al hacer una clase static
? Quiero decir, después de declarar una clase estática, uno aún debe declarar a todos los miembros a los que quiere tener acceso sin instanciación, como estáticos también.
Esto significa que, por ejemplo, la Math
clase podría declararse normal (no estática), sin afectar la forma en que los desarrolladores codifican. En otras palabras, hacer que una clase sea estática o normal es algo transparente para los desarrolladores.
c#
class
static-keyword
Saeed Neamati
fuente
fuente
Respuestas:
Hace obvio para los usuarios cómo se usa la clase. Por ejemplo, no tendría sentido escribir el siguiente código:
C # no tiene que prohibir esto, pero dado que no sirve para nada, también podría decirle al usuario eso. Ciertas personas (incluyéndome a mí) se adhieren a la filosofía de que los lenguajes de programación (y las API ...) deberían ser lo más restrictivos posible para que sean difíciles de usar incorrectamente: las únicas operaciones permitidas son aquellas que son significativas y (con suerte) correctas.
fuente
sealed
en primer lugar. Reconozco que no todas las personas están de acuerdo con este sentimiento, pero los comentarios no son un buen lugar para discutirlo. Pero en el caso destatic
este problema ni siquiera se plantea: la creación de instancias nuncaSystem.Math
tendrá sentido.Math
clase como estáticos sin declarar laMath
clase como estática, aún puede usarla, sin necesidad de instanciación.static
.new Math()
.StackOverflow tiene una gran discusión sobre este tema . Para facilitar la consulta, lo copiaré y pegaré aquí, en nombre de su autor, Mark S. Rasmussen :
fuente
Me sorprende que nadie más haya mencionado que las
static
clases permiten métodos de extensión : extender de forma segura un tipo existente (incluida la adición de definiciones de métodos a las interfaces ) que no es de su propiedad. Por ejemplo, lo que en Scala espuede expresarse en C # como
fuente
Para mí, una clase estática (en C #) es como llamar a una función.
Por ejemplo
Paso una secuencia y recupero una secuencia. Todo está contenido en ese método. Sin acceso a la variable miembro, etc.
Honestamente, principalmente su uso para mí ha sido disminuir las líneas de código:
Por qué:
Cuando puedo hacer esto:
Entonces, usaría clases estáticas en esos casos, cuando quisiera hacer algo sin la necesidad de una clase y significaría menos escribir.
Los puntos de Mark S. son válidos, pero para mí, si tengo algunos métodos de utilidad, es más fácil fingir que estoy llamando a una función para hacer referencia a ellos como un revestimiento.
Eso puede ser simplista, pero así es principalmente como lo he usado
static
.fuente