2010-11-10 10 views
11
sealed class PI 
{ 
    public static float number; 
    static PI() 
    { number = 3.141592653F; } 
    static public float val() 
    { return number; } 
} 
  1. ¿Cuál es la diferencia entre estática pública y pública estática? Pueden ser usados ​​en cualquier orden?public static vs static public - ¿hay alguna diferencia?

  2. ¿Cómo usaría static public float val()?

    ¿Se ejecuta tan pronto como se inicializa la clase?

+0

Probablemente una segunda pregunta se haga en una pregunta separada. – McKay

+1

Ver también el hilo más viejo [¿Existe una convención para el orden de los modificadores en C#?] (Http://stackoverflow.com/questions/191929/). –

Respuesta

9

Bueno, es como el nombre de una Persona =) Llamando a Tom Mike o Mike Tom, no hay diferencia.

+7

Excepto quizás si eres Sing Confu y te llaman Confu Sing. –

+1

por favor, no flirteo gracias –

+0

lo siento ........... – Singleton

9

Sobre el orden de los modificadores de

Pueden ser utilizados en cualquier orden. Es solo una elección estilística cuál usas. Siempre uso visibilidad primero, y la mayoría de los otros códigos también.

Sobre la segunda pregunta: ¿

static public float val() 

Esto es sólo una función estática. Usted lo llama con PI.val(). Simplemente no necesita una instancia de la clase para llamarla, sino que la llama directamente a la clase. Una función estática no recibe una referencia this, no puede ser virtual, es como una función en un lenguaje no OOP, excepto que está utilizando la clase como espacio de nombres.

7

No hay diferencia. Su orden no es importante entre sí

18

No hay diferencia. Puede especificarlos en cualquier orden. Sin embargo, descubro que la mayoría de los desarrolladores tienden a usar público estático y público no estático.

+7

Sí. Modificador de accesibilidad primero, por convención. Siempre. –

4

En cuanto a la segunda pregunta: ¿El método está disponible sin una instancia de una clase, se le podía llamar así:

PI.val(); 

Debido a que la clase sólo tiene miembros estáticos, la clase probablemente debería ser un estático clase, y luego nunca podría ser inicializado.

5

para responder a su segunda pregunta, que probablemente debería ser escrita como

public static class Pi 
{ 
    private static float pi = 0; 

    public static float GetValue() 
    { 
     if (pi == 0) 
      pi = 3.141592653F; // Expensive pi calculation goes here. 

     return pi; 
    } 
} 

y lo llaman así:

float myPi = Pi.GetValue(); 

La razón para escribir una clase tal es almacenar en caché el valor, el ahorro de tiempo en llamadas posteriores al método. Si la forma de obtener pi requirió mucho tiempo para realizar los cálculos, solo querrá hacer los cálculos una vez.

+0

Excepto que pi no puede ser nulo ya que es un tipo de valor –

+0

@jesperll: fijo. –

Cuestiones relacionadas