Должен ли класс Program быть статическим? - PullRequest
4 голосов
/ 23 октября 2019

Я получаю следующее предупреждение в Visual Studio 2019 после создания нового проекта ASP.NET Core 3:

Предупреждение CA1052 Тип «Программа» является статическим типом держателя, но не является ни статическим, ни NotInheritable

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

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

против

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

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

Должен ли я добавить статический модификатор? Почему, почему нет? Плюсы и минусы?

Редактировать: Это ASP.NET Core 3 API

1 Ответ

8 голосов
/ 23 октября 2019

В более простых терминах можно предположить, что сообщение говорит:

Кажется, что ваш класс 'Program' содержит только методы, объявленные как статические, и в результате он не может участвовать в наследованиииерархия. Объявите его как статический (или запечатанный, если вы нацеливаетесь на древнюю версию .net, которая не поддерживает статические классы), чтобы более точно отразить, каково его отношение к дизайну:

Рекомендуется пометитьВаш класс как статический, потому что он содержит только статические вещи. Это предотвратит любого, кто совершит ошибку, пытаясь унаследовать его и подумать, что затем он может сделать что-то полезное для наследования с унаследованной версией

. Microsoft не помечает это как статическое для вас, потому что в программе нет ничего особенногокак таковой;вы можете поместить в него нестатические методы, или вы можете поместить свой static void Main в другой класс, например Person, который является инстанцируемым.

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

Это будет работать нормально;класс не должен быть статическим для размещения точки входа в приложение, и в этом случае класс не может быть статическим, потому что он имеет нестатические члены. Он может быть (и есть, в основном) создан в основном. Это не называется программой;нигде не существует класса с именем Program, и это крошечное приложение все еще будет работать (мало что делает ..)

В вашем случае, либо сделайте, как рекомендовано, и добавьте статический модификатор в ваш класс, потому что онсделает вашу программу более надежной, или добавит элемент экземпляра, если вы можете придумать вескую причину создания экземпляра Program, или проигнорируете сообщение и продолжите работу с вашим нестатическим классом, который содержит только статические методы - он все равно будет работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...