Zum Beispiel in C# oder Java, haben Sie immer eine main() -Methode, um Ihr Programm laufen zu lassen. Wie heißt die Klasse, in der sie sich befindet? Einige Ideen, die ich verwenden würde, wäre nur "Programm" oder der Name des Programms selbst. Was würde in diesem Fall als konventionell angesehen werden?In einer OO-Sprache, wie nennen Sie Ihre Klasse, die die Main-Methode enthält?
Antwort
Visual Studio erstellt "Program.cs" in diesen Tagen, die ziemlich vernünftig scheint. Ein weiterer selbst dokumentierender Name, den ich mag, ist "EntryPoint".
Ich benenne die Hauptklasse nach der Anwendung selbst. Z.B. Ein Rechnerprogramm kann eine "CalculatorProgram" oder nur eine "Calculator" Klasse haben.
In Anbetracht der Tatsache, dass VS Ihre Hauptklasse, was auch immer Sie Ihre Anwendung nennen, Namen, denke ich, das ist ziemlich Standard.
Es tatsächlich benennt es automatisch "Programm", wenn es eine Konsole appy ist. – Kev
XApplication, wobei X ein beschreibender Name des Programms ist.
In Objective-C Cocoa ist main() die C-Funktion. Er sendet eine Nachricht an das Objekt NSApplication, das die ausgeführte Anwendung darstellt.
Können Sie uns etwas mehr erklären, die mit Obj-C Cocoa nicht vertraut sind? Sagen Sie, dass es keine anfängliche Klasse gibt, die verwendet wird? –
@ d03boy: Bingo. Dasselbe gilt für C++. Nicht alle OO-Sprachen sind so obsessiv, alles in Objektklassen wie Java/C# zu zwingen (und C# wird immer weniger). – Shog9
Obj-C ist eine Obermenge von C. Alles, was in C OK ist, ist auch in Obj-C OK, einschließlich der Art, wie main() verwendet wird. – mouviciel
Ich verwenden die Standardnamen der Sprache denke, wäre eine gute Idee sein ... andere wissen, dass es das Haupt ist()
Ich ziehe ConsoleStub.cs für Konsolenanwendungen und Core.cs für andere
Ich nenne es normalerweise auch Core. Ich gebe meinen Klassen auch abstrakte Namen, die aber nichts mit ihrer eigentlichen Funktion zu tun haben (außer wenn es notwendig ist). – BBetances
Ich denke, Programm ist ein herkömmlicher Fall. In meinem Fall bin ich eher daran interessiert, über den Namen nachzudenken, den ich Namespace geben sollte, besonders wenn es nur eine Klasse enthält. In Ermangelung definitiver Richtlinien für die Namensgebung von Namespaces mit nur einer Klasse, habe ich ein Muster wie dieses: Stub für abstrakte Klassen, Impl für die Implementierung, Projekt für den Namen der kompilierten DLL/EXE.
Beispiel:
FootwearRemotingStubProject.dll:
namespace FootwearRemotingStubProject
{
public class FootwearRemotingStub
{
...
}
}
FootwearRemotingImplProject.exe:
using FootwearRemotingStubProject;
namespace FootwearRemotingImplProject
{
public class FootwearRemotingImpl: FootwearRemotingStub
{
...
}
}
Ich bin nicht sicher, ob es nur ich bin, aber FootwearRemotingStubProject klingt für mich nicht sehr beschreibend, obwohl es viele Wörter hat. Ich bin mir nicht sicher warum. –
Ich stimme irgendwie zu, es ist nur ein vorläufiger Ansatz für mich Remoting Code-Partner zu nennen (DLL + EXE [läuft auf Mono]). Außerdem hilft es mir, nicht zu sehr darüber nachzudenken, wie ich meine Klasse anders benennen soll als den Namensraum, der sie enthält. –
Ich mag "StartUp"
Ich benutze entweder Haupt- oder Haupt
Aber nicht Main, oder? –
Programm scheint der Standard zu sein. Funktioniert bei mir: D
"Launcher"
VB.NET:
Public Module Main
Public Sub Main(String args())
End Sub
End Module
Main. Das Paket, in dem es sich befindet, sagt den Rest.
com.finance.calculator.Main
Und im Haupt Ich habe nur:
public static void main(String [] args) {
FinanceCalculator calc = new FinanceCalculator();
calc.show(); // or start(); or init. or whatever.
}
: SI hoffe, ich habe nie einen Finanzrechner-Code: S: S
Ich denke, das würde in C# nicht funktionieren, da eine statische Methode Main in der Klasse Main wäre der statische Konstruktor :) – OregonGhost
@OregonGost. "Ja wirklich?" Gibt es einen Unterschied zwischen "Main" und "Main" in C#? Was ist ein statischer Konstruktor? : P – OscarRyz
ich immer FooLauncher verwendet haben, weil es erlaubt es mir, die gesamte Logik des Befehlszeilen-Parsens in einer Klasse zu kapseln (anstatt es in eine Methode zu bringen), was auch eine bessere Testbarkeit ermöglicht. Es ist auch eine bessere Trennung von Bedenken: Foo könnte etwas sein, das du außerhalb der Kommandozeile benutzt, aber FooLauncher ist da, um Foo gegebene Kommandozeilenverarbeitung zu starten.
Dies ist besonders wichtig in einer Anwendung, die insgesamt mehrere Befehlszeilen-Tools zur Verfügung hat: Jeder hat seinen eigenen Launcher. Nur zu sagen Programm macht wenig Sinn, wenn Ihr "Programm" mehrere Kommandozeilen-Tools hat.
Ich lege es nicht in eine Klasse. Tatsächlich verwende ich nicht einmal eine Methode, nur ein Code-Schnipsel:
#!/usr/bin/env ruby
puts 'Look Ma, no class, no method!'
Wer das gewählt hat, liegt falsch. Führen Sie dieses Ein-Zeilen-Ruby-Skript aus: 'raise 'snafu'. Sie sehen 'foo.rb: 1: in \ '
@smotchkiss: Eigentlich ist 'main' ein * Objekt *, keine Methode. Es ist das anonyme globale Objekt, in dem der gesamte Code ausgeführt wird, der nicht in einer Klasse, einem Modul oder einer Methode enthalten ist. –
- 1. Schreiben Sie die Definition einer Klasse-Spieler enthält:
- 2. Vorlage einer Klasse, die eine Konstante-Typ-Vorlage enthält?
- 3. Wie ein Verfahren in einer anderen Klasse nennen
- 4. Init stoppt nach "Was würden Sie Ihre durchschnittliche App nennen?"
- 5. Erstellen einer Klasse, die einige Grafiken enthält/zeichnet?
- 6. Wie haben erweitern Sie Ihre Assert Klasse
- 7. Wie kopiere ich eine Instanz einer Klasse mit einer geschachtelten Klasse, die ein Zeigerelement in der äußeren Klasse enthält?
- 8. Setzen Sie die Klasse, die die Hauptmethode enthält, in ein Unterpaket
- 9. Wie können Sie die Eigenschaften einer Klasse durchlaufen?
- 10. Zwei Routenattribute für die Klasse und ihre Methode?
- 11. Ist es möglich, eine Instanz einer Klasse in VB aus einer Zeichenfolge zu erstellen, die die Definition der Klasse enthält?
- 12. Name der Klasse, die den Methodencode enthält
- 13. Wie notieren Sie die Ablehnung einer Klasse in Java?
- 14. Wie implizit Konstruktor der übergeordneten Klasse nennen
- 15. Geben Sie List den gleichen Typ wie die Klasse, die es enthält
- 16. Serialisieren einer abgeleiteten Klasse als ihre Basisklasse
- 17. Wie werden die in einer bestimmten Klasse in einer anderen Klasse generierten Daten verwendet? (in Python)
- 18. Die generierte dex2jar.jar-Datei enthält nur die appinfo-Klasse
- 19. Wählen Sie die Zeile, die zumindest die Suchanfrage enthält
- 20. Ersetzen Sie die Implementierung einer "versiegelten" Klasse
- 21. Nennen Sie die Namen aller Dateien/Ordner in einem Array
- 22. Warum kann ich keine innere Klasse mit zwei Ebenen und demselben Namen wie die Klasse, die sie enthält, haben?
- 23. das Objekt serialisiert die die Funktion enthält -
- 24. Java - Speicher-Objekte in einer Hierarchie, die ihre Klassenvererbung folgt
- 25. Wie strukturieren Sie Ihre Entitäten, die Sie wiederverwenden möchten?
- 26. Wie finde ich heraus, welches Plugin die gewünschte Klasse enthält?
- 27. Wie nennen Sie die Tags in Subversion und CVS, die automatischen Inhalt hinzufügen?
- 28. So rufen Sie die Methode einer Klasse innerhalb der Klasse
- 29. So entfernen Sie die Spalten, die NA in Linux enthält
- 30. Aktualisieren einer MySQL-Spalte, die Punkt (.) In seinem Namen enthält
Oooh, ich mag "EntryPoint". "Programm" scheint mir mehrdeutig, abgesehen davon, dass Visual Studio den Namen standardmäßig verwendet. –
Ich mag EntryPoint - sehr klar –
Yup EntryPoint war das, was ich immer in den Tagen verwendet habe, bevor Visual Studio mit dem Programmieren anfing. Trotzdem bevorzugen wir den EntryPoint. –