2011-01-16 21 views
6

C# ermöglicht es uns, mehr als eine Klasse mit der Methode zu definieren. Die Hauptmethode ist der Einstiegspunkt für die Programmausführung. Warum also wollen wir mehr als einen Platz für die Programmausführung haben? Was ist der Vorteil von mehreren Hauptmethoden gegenüber einer einzigen Hauptmethode?Was ist die Verwendung von mehreren Hauptmethoden?

Edit:

Example.cs

Class Example_1 
{ 
public static void Main() 
    { 
    System.Console.WriteLine("Example 1") 
    } 

public void test() 
    { 
    System.Console.WriteLine("Test method") 
    } 
} 

Class Example_2 
{ 
public static void Main() 
    { 
    System.Console.WriteLine("Example 2") 
    } 
} 

Wenn ich Typ "csc Example.cs" was würde dann passieren? Was tun, wenn ich die Testmethode der Klasse Example_1 in Class Example_2 erben möchte. Wird dieser Code funktionieren?

Antwort

12

Sie könnten es verwenden, damit verschiedene Buildkonfigurationen die gleiche ausführbare Datei mit unterschiedlichen Einstiegspunkten erstellen - z. B. einen Konsoleneingangspunkt vs. einen WinForms-Einstiegspunkt.

Persönlich benutze ich es bei Gesprächen und im Beispielcode für C# in Depth. Jede Datei ist ein in sich abgeschlossenes Beispiel, aber es ist einfacher, nur einen Einstiegspunkt zu haben - so dass der Einstiegspunkt eine Dienstprogrammklasse verwendet, um den Benutzer aufzufordern, welches Beispiel er ausführen möchte.

+0

Wie würden Sie die Compiler sagen/Linker Welche der 'Main' Methoden ist der Einstiegspunkt? Über die "Startup-Objekt" -Einstellungen in einer VS.NET-Projektkonfiguration? –

+1

Wie wählen Sie die Methode aus, die in ihren Metadaten tatsächlich mit dem Token ".entrypoint" gekennzeichnet werden soll? Ich suchte nach einem 'EntryPointAttribute', fand aber nur Referenzen auf F #. Ich habe nie versucht, es in C# zu erreichen, und dachte, dies sei eine Frage der Namenskonvention, was in der Tat nicht der beste Weg ist. –

+1

@Uwe: @Ondrej: Entweder über die Projekteigenschaften oder die Befehlszeilenoption/main:. –

0

Sie können mehrere Methoden namens Main() in verschiedenen Klassen haben. Aber nur einer von ihnen wird verwendet, um das Programm zu starten. Es ist nur eine normale Methode, Sie können die anderen Main's für alles verwenden, was Sie wollen. (Aber es wird nicht empfohlen.)

5

Erstens, wenn Sie mehrere Hauptmethoden haben, können Sie angeben, welche von Ihrem Compiler als Einstiegspunkt für die Anwendung verwendet werden soll.

Mehrere Hauptmethoden können für Testzwecke nützlich sein. Vielleicht entwickeln Sie eine Windows-Anwendung wie einen Texteditor. Wenn Sie beispielsweise an einer Syntaxhervorhebung arbeiten, können Sie eine zusätzliche Hauptmethode verwenden, die die GUI startet, eine Testdatei lädt und die entsprechende Syntaxhervorhebung aktiviert. Ein anderes Beispiel kann eine Anwendung sein, die nur für die Verwendung in der Konsole oder als Windows-Anwendung mit zwei verschiedenen Klassen mit Hauptmethoden kompiliert wird.

+0

Können Sie nicht dasselbe mit Main-Methodenparametern und/oder bedingten Kompilierungssymbolen erreichen? – tenor

+0

Ich habe das Gefühl, dass es eine "Zweite" geben sollte ... –

+0

@tenor - sicher, dass es möglich ist, so mache ich es (zu Testzwecken verwende ich Präprozessorrichtungen und für die GUI-Umschaltung verwende ich Parameter). @Cody Grey - Ich bin mir nicht sicher, was Sie bedeuten ..? – Matten

0

Es wäre wahrscheinlich ein seltenes Ereignis, aber ich würde mir vorstellen, wenn Sie mit einem externen Code, der eine Main() -Methode hat, verknüpfen müssten, dann würden Sie dem Compiler sagen, dass er Ihren verwenden soll.

+1

Wenn Sie * mit der Assembly verknüpfen, die eine Main-Methode enthält, müssen Sie dem Compiler nichts mitteilen ... die Main-Methode des Drittanbieters wäre nicht in Ihrer Assembly enthalten, so dass es keine Mehrdeutigkeiten geben würde. –

+0

Ich wäre neugierig, wenn Sie diese Zweideutigkeit haben können, wenn Sie auf ein Netmodul verlinken. – tenor

0

Warum sollten Sie nicht mehrere Klassen mit einer Main-Methode erstellen können? Immerhin ist Main nur der Name der Methode. Wenn Sie eine Klasse erstellen, ist es völlig in Ordnung, eine Methode namens Main darin zu definieren.

0

Wenn Sie Visual Studio CMD Prompt

dann versuchen Sie es mit wie unten angegeben auszuführen:

csc filename.cs /main:classname 

wo Dateiname der Name der Datei, in der Code gespeichert ist und Klassenname ist der Name der Klasse mit dem Main, den wir gerne als Einstiegspunkt nutzen würden.

Wie im gegebenen Programm gibt es zwei Klassen A und B, in denen jede eine Hauptmethode enthält. Wir können schreiben als

csc Dateiname.cs/main: A [für Klasse-A-Haupt Execution] oder

csc filename.cs/main: B [für die Klasse B Haupt Execution]

+0

Die Frage war warum und nicht wie es geht. –

1

Es gibt nur einen Eintrittspunkt in einem C# Programm sein kann. Wenn Sie mehr als eine Klasse mit einer Main-Methode haben, müssen Sie Ihr Programm mit der Option/main compiler kompilieren, um anzugeben, welche Main-Methode als Einstiegspunkt verwendet werden soll.

Compile t2.cs und t3.cs Angabe, dass die Main-Methode wird in Test2 wie diese,

csc t2.cs t3.cs/main

finden: Test2

Verwandte Themen