2010-11-10 11 views
11
sealed class PI 
{ 
    public static float number; 
    static PI() 
    { number = 3.141592653F; } 
    static public float val() 
    { return number; } 
} 
  1. Qual è la differenza tra pubblico statico e pubblico statico? Possono essere utilizzati in qualsiasi ordine?pubblico statico vs pubblico statico - c'è una differenza?

  2. Come utilizzare static public float val()?

    Viene eseguito non appena la classe viene inizializzata?

+0

Una seconda domanda dovrebbe probabilmente essere posta in una domanda separata. – McKay

+1

Vedere anche thread precedente [Esiste una convenzione sull'ordine dei modificatori in C#?] (Http://stackoverflow.com/questions/191929/). –

risposta

9

Bene, è proprio come il nome di una Persona =) Chiamando Tom Mike o Mike Tom, nessuna differenza.

+7

Tranne forse se sei Sing Confu e ti chiamano Confu Sing. –

+1

per favore non flirtare grazie –

+0

scusate ........... – Singleton

9

Circa l'ordinamento dei modificatori

Essi possono essere utilizzati in qualsiasi ordine. È solo una scelta stilistica che usi. Io uso sempre prima la visibilità e anche la maggior parte degli altri codici.

Circa la seconda domanda:

static public float val() 

Questa è solo una funzione statica. Lo chiami con PI.val(). Semplicemente non hai bisogno di un'istanza della classe per chiamarla, ma chiamala direttamente sulla classe. Una funzione statica non riceve un riferimento this, non può essere virtuale, è proprio come una funzione in un linguaggio non OOP, tranne che sta usando la classe come spazio dei nomi.

7

Non c'è differenza. Il loro ordine non è importante l'uno rispetto all'altro

18

Non c'è differenza. Sei libero di specificarli in qualsiasi ordine. Tuttavia, trovo che la maggior parte degli sviluppatori tendono a usare public public e non public public.

+7

Sì. Modificatore di accessibilità prima, per convenzione. Sempre. –

4

Per quanto riguarda la seconda domanda: Il metodo è disponibile senza un'istanza di una classe, potrebbe essere definito così:

PI.val(); 

Poiché la classe ha solo membri statici, la classe dovrebbe probabilmente un statico classe, e quindi non potrebbe mai essere inizializzato.

5

Per rispondere alla tua seconda domanda, probabilmente dovrebbe essere scritto come

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

E lo chiamano così:

float myPi = Pi.GetValue(); 

La ragione per la scrittura di una classe è quello di memorizzare nella cache il valore, risparmio di tempo sulle chiamate successive al metodo. Se il modo per ottenere pi richiede molto tempo per eseguire i calcoli, si desidera eseguire i calcoli solo una volta.

+0

Tranne che pi non può essere nullo poiché è un tipo di valore –

+0

@jesperll: corretto. –

Problemi correlati