Domanda c #: applicazione console - metodi statici


perché in C #, l'applicazione console, nella classe "programma", che è l'impostazione predefinita, tutti i metodi devono essere statici

static void Main(string[] args)

44
2017-11-06 05:58


origine


risposte:


Le funzioni dei membri no avere essere statici; ma se lo sono non statico, che richiede di istanziare a Program oggetto per chiamare un metodo membro.

Con metodi statici:

public class Program
{
    public static void Main()
    {
        System.Console.WriteLine(Program.Foo());
    }

    public static string Foo()
    {
        return "Foo";
    }
}

Senza metodi statici (in altre parole, che richiedono di istanziare Program):

public class Program
{
    public static void Main()
    {
        System.Console.WriteLine(new Program().Foo());
    }

    public string Foo() // notice this is NOT static anymore
    {
        return "Foo";
    }
}

Main deve essere statico perché altrimenti dovresti dire al compilatore come istanziare il Program classe, che può o non può essere un compito banale.


63
2017-11-06 06:00



Puoi anche scrivere metodi non statici, dovresti usare in questo modo

static void Main(string[] args)
{
    Program p = new Program();
    p.NonStaticMethod();
}

L'unico requisito per l'applicazione C # è che l'assembly eseguibile debba avere un metodo main static in qualsiasi classe nell'assembly!


23
2017-11-06 06:01



Il metodo Main è statico perché è il punto di ingresso del codice per l'assembly. All'inizio non esiste un'istanza di alcun oggetto, solo il modello di classe caricato in memoria e i suoi membri statici incluso il metodo statico del punto di ingresso principale. Main è predefinito dal compilatore C # per essere il punto di ingresso.

Un metodo statico può chiamare solo altri metodi statici (a meno che non ci sia un handle di istanza di qualcosa composto per l'uso). Questo è il motivo per cui il metodo Main chiama altri metodi statici e perché si ottiene un errore di compilazione se si tenta di chiamare un metodo non-statico (istanza).

Tuttavia, se si crea un'istanza di qualsiasi classe, anche della classe Program stessa, si inizia a creare oggetti nell'applicazione nell'area di memoria heap. È quindi possibile iniziare a chiamare i membri dell'istanza.


11
2017-11-06 06:01



Non tutti i metodi devono essere statici, è possibile aggiungere metodi di istanza e anche creare un'istanza della classe Program.
Ma per Main deve essere statico perché è il punto di ingresso della tua applicazione e nessuno sta per creare un'istanza e chiamarla.


5
2017-11-06 06:02



Quindi, le risposte tecnicamente corrette sono sopra :)

Devo sottolineare che generalmente non vuoi andare nella direzione di tutti i metodi statici. Crea un oggetto, come un modulo di Windows, un controller per esso e vai verso un codice orientato agli oggetti invece che procedurale.


1
2017-11-06 06:20