Sollte die Programmklasse statisch sein?

9

Nach dem Erstellen eines neuen ASP.NET Core 3-Projekts wird in Visual Studio 2019 die folgende Warnung angezeigt:

Warnung CA1052 Typ 'Programm' ist ein statischer Haltertyp, jedoch weder statisch noch nicht vererbbar

public class Program
    {
        public static void Main(string[] args)
        {
            // ...
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            // ...
    }

vs.

public static class Program
    {
        public static void Main(string[] args)
        {
            // ...
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            // ...
    }

Soll ich den statischen Modifikator hinzufügen? Warum Warum nicht? Vor-und Nachteile'?

Bearbeiten: Dies ist eine ASP.NET Core 3- API

Nelson Sousa
quelle
Haben Sie gelesen, was das feine Handbuch zu diesem Thema zu sagen hat?
Caius Jard
Ich habe es getan, aber Programm ist, wie Sie wissen, ein Sonderfall
Nelson Sousa
1
Wie ist Programm ein Sonderfall? Es muss nicht einmal Programm genannt werden. Jede Klasse mit einer statischen Leere Main kann ein Einstiegspunkt für eine Start-App sein
Caius Jard
Warum hat Microsoft Program nicht zu einer statischen Klasse gemacht? Sie sollten?
Nelson Sousa
2
Jede Klasse mit einer statischen Leere Main kann ein Einstiegspunkt für eine Start-App sein
Caius Jard

Antworten:

11

In grundlegenderen Begriffen könnte man sich vorstellen, dass die Botschaft sagt:

Ihre Klasse 'Programm' scheint nur Methoden zu enthalten, die als statisch deklariert sind, und kann daher nicht an einer Vererbungshierarchie teilnehmen. Deklarieren Sie es als statisch (oder versiegelt, wenn Sie auf eine alte Version von .net abzielen, die keine statischen Klassen unterstützt), um die Designstimmung genauer wiederzugeben

Es ist eine Empfehlung, Ihre Klasse als statisch zu markieren, da sie nur statisches Material enthält. Dies verhindert, dass jemand den Fehler macht, zu versuchen, davon zu erben, und denkt, dass er mit der geerbten Version etwas Nützliches in Bezug auf die Vererbung tun kann

Microsoft markiert es für Sie nicht als statisch, da das Programm an sich nichts Besonderes ist. Sie könnten nicht statische Methoden einfügen, oder Sie könnten Ihre static void Mainin eine andere Klasse wie Person einfügen, die sofort instanziierbar ist.

class Person{
  public string Name {get;set;}
  static void Main(){
    Person p = new Person();
    p.Name = Console.ReadLine();
  }
}

Das würde gut funktionieren; Eine Klasse muss nicht statisch sein, um den Anwendungseinstiegspunkt zu hosten. In diesem Fall kann die Klasse nicht statisch sein, da sie nicht statische Mitglieder hat. Es kann (und wird hauptsächlich) in der Hauptsache instanziiert werden. Es heißt nicht Programm; Es gibt nirgendwo eine Klasse namens Programm und diese winzige App wird immer noch ausgeführt (macht nicht viel ..)

In Ihrem Fall tun Sie entweder wie empfohlen und fügen Sie Ihrer Klasse einen statischen Modifikator hinzu, da dadurch Ihr Programm etwas robuster konstruiert wird, oder fügen Sie ein Instanzmitglied hinzu, wenn Sie sich einen gültigen Grund für die Instanziierung des Programms vorstellen können, oder ignorieren Sie die Nachricht und fahren Sie mit Ihrer nicht statischen Klasse fort, die nur statische Methoden enthält - es wird immer noch funktionieren

Caius Jard
quelle