Frage

Ich habe ein Programm mit einer gewissen Länge, mit einer Klasse und vielen Methoden. All dies muss in einer riesigen Klasse enthalten sein, die die gesamte Datei mit Ausnahme der Verwendung von Anweisungen umhüllt. Die Notwendigkeit dieser riesigen Verpackungsklasse scheint sinnlos zu sein. Wird dies erst später verwendet, wenn ein Programm mit mehreren Dateien erstellt wird?

    using System;
    using System.IO;
    using System.Text.RegularExpressions;
    using System.Collections.Generic;
    using System.Linq;

    public class CollectKeywordsFromLogs // why do I need this ( when it is the only class [as i just added the test class for the question])
    {

    //a class
        //constructor
        //methods

    //methods

    public static void Main()  // and why would i need to explicitly declare this public? it works either way, and a private main would be useless no?
    {}

    }

Dies ist meine vollständige Datei. Ich kompile csc File.cs und dann file.exe.

Oh duh, Fall sensibel. Danke. Aber immer noch -> warum brauche ich die Wickelklasse, wenn sie die Testklasse verwendet?

War es hilfreich?

Lösung

Es gibt keine globalen Methoden oder Variablen in C#. Sie müssen sich in einer Typdeklaration wie Klasse oder Struktur befinden. Dies gilt auch für die Main () -Methode.

Eric Lippert postete eine schöne Antwort auf so Frage, Warum C# keine Nichtmitgliedfunktionen wie C ++ zulässt, und weiter nachverfolgt Sein Blog: Warum implementiert C# keine "Top -Level" -Methoden?

Möglicherweise finden Sie auch den folgenden MSDN -Link nützlich: Vergleich zwischen C ++ und C#

Die Main () -Methode ist ein Einstiegspunkt von C# -Programmen. Es sollte nur einen Einstiegspunkt in einem Programm geben. Es kann jedoch mehrere Klassen geben, die eine Main () -Methode in einem Programm enthalten. Wenn Sie jedoch über mehrere Hauptmethoden verfügen, sollten Sie angeben, welche Hauptmethode als Einstiegspunkt verwendet werden soll, indem Sie Ihr Programm mit dem zusammenstellen Compiler -Option /main.

Die main () -Methode muss sein static und sollte nicht sein public laut dem Msdn. Standardmäßig erstellt VS2008 ein Main () als statische Privat- und die Laufzeit kann es ohne Probleme aufrufen. Sie können es ändern public Und es wird gut zusammenstellen. Ich denke jedoch, dass es wirklich umständlich ist, da Sie andere Klassen nicht daran hindern können, Main () zu rufen, da es öffentlich ist.

Weitere Informationen zur Hauptmethode finden Sie im folgenden MSDN -Artikel: Main () und Befehlszeilenargumente (C# Programmierhandbuch)

Andere Tipps

In C# sollte es Haupt <--- Capital M: D sein

Es scheint mir, dass Sie eine Klasse verwenden, wenn Sie eine verwenden sollten Namespace.

Davon abgesehen ... in C#muss der gesamte Code in einer Art von irgendeiner Art liegen. Es wäre albern, eine Ausnahme für die zu machen Main() Methode.

Ein privat Main() Funktioniert übrigens tatsächlich als Programmeintrittspunkt.

Ein Main muss die richtige Signatur haben, um als Programm -Start -up -Methode erkannt zu werden. Das heißt, Sie können nur 1 pro Klasse haben. Sie können mehr als 1 pro Programm haben. Sie können die Klasse auswählen, die entweder in der Befehlszeile der Compiler oder in Projekte | Eigenschaften | Anwendung (suchen Sie nach dem Combobox -Startobjekt ").

Diese große Klasse klingt seltsam, können Sie den Umriss dessen zeigen, was Sie meinen? A, um eine Vermutung zu erraten, sind Sie nicht verwirrend? class und namespace hier?

Hinzufügen

Als Antwort auf Ihre Bearbeitung in C# jeder Die Methode, einschließlich des Haupts, muss in einer Klasse sein. Sehen dieser Beitrag. Und die Signatur für Main per Definition ist per Definition

public static void Main(string[] args) { }

Obwohl Sie den Args -Parameter weglassen dürfen. Die Befehlszeile in Ihrem Fall wäre:

csc /main:CollectKeywordsFromLogs  file.c

Es gibt Standardregelregeln, wenn Sie auslassen /Main

C# verwendet das klassenbasierte objektorientierte Programmierparadigma, globale Variablen gehören zu anderen Paradigmen wie prozeduraler Programmierung. Guck mal hier Für einen Artikel über Programmierparadigmen. Es stimmt, dass einige objektorientierte Programmiersprachen, besonders C ++, globale Variablen unterstützt, aber nicht C# (und das ist ein guter IMO: O)).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top