2011-01-15 13 views
6

En este ejemplo de código:¿Qué es mejor? estática privada vs privada

public class SuperMan { 
    private static bool IsProper(decimal x) { 
     return x > 31.0m && x < 45.0m; 
    } 

    public bool CheckStuff(string a, string b, string c) { 
     // lots of code, some of which introduces a variable x 
     return IsProper(x) && /* other conditions */; 
    } 
} 

En caso IsProper (..) una 'estática privada' o 'privado'. Suponiendo:

  1. IsProper (..) no es necesario para acceder a cualquier estado de la instancia
  2. No están preocupados por el rendimiento diferente entre las dos opciones (una de las cosas que nunca deben (incluso en el futuro.) hacer es adivinar sobre el rendimiento y sin medida real y optimizar sin la necesidad.)
+3

Podría futuras versiones de 'IsProper' acceder al estado de la instancia? – CodesInChaos

+0

No ... voy a editar la pregunta para que quede claro. – kidoman

Respuesta

4

se podría ser estática, ya que no parecen tener nada que ver con la clase del superhombre ni sus miembros. Pero deberías preguntarte si esa función pertenece en esa clase en absoluto.

Si está comprobando si el decimal es un decimal correcto para SuperMan, entonces pertenece allí. Pero no lo dejaría estático en ese caso. Lo más probable es que luego deba reemplazar esos valores constantes con propiedades de SuperMan.

+1

Es privado, por lo que solo se puede adivinar que es un ayudante. Si el mismo código se usa en otro lugar, entonces pertenece a una clase base o clase auxiliar. – leppie

+0

Es una función auxiliar. – kidoman

+1

La herramienta de análisis de código proporcionada por Microsoft señala esto como indeseable; si un método no utiliza ningún campo de instancia, entonces debe ser estático. No entiendo qué dificultad ves al hacerlo instancia cuando es necesario (en lugar de prematuramente). – Timwi

0

métodos estáticos pueden ser un poco más rápido, pero por otro lado a veces puede ser más difícil de refactorizar.

+0

¿Cómo es eso? ¿Podría darnos un ejemplo? – kidoman

+0

@ KiD0M4N, Raf tiene razón, la estática es más rápida porque no hay necesidad de crear estática, pero debe usar el método estático en objetos inmutables o en condiciones sin estado para evitar resultados no deseados. –

+0

Si necesita crear un objeto solo para llamar al método, eso es cierto, pero si ya tiene la instancia, la diferencia en el rendimiento es despreciable. Existe, pero no necesita preocuparse por eso, a menos que esté escribiendo un motor de renderizado 4D de primera categoría. – GolezTrol

2

razones para hacer IsProper un miembro de instancia:

  • IsProper necesita otra aplicación en una clase heredada
  • IsProper puede ser que necesite acceso a los miembros en el futuro

Razones para hacer IsProper una estática miembro:

  • Tiene una pequeña penalización de rendimiento por hacer i t un miembro de instancia.
  • Si sólo necesita crear una instancia de la clase para llamar IsProper, que le convierten en una estática
Cuestiones relacionadas