c#, Что является различным между статическим классом и нестатичный (я говорю о самом классе не поле) [дубликат]

Я использую знатока для своих сборок Java, который имеет плагин, названный плагин блока знатока .

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

10
задан PoLáKoSz 18 June 2018 в 08:58
поделиться

7 ответов

Если вы посмотрите на код IL, статический класс будет абстрактный и запечатанный , что дает два важных качества:

  • Вы не можете создавать экземпляры из него
  • Он не может быть унаследован

Следствием первого пункта является то, что статический класс не может содержать нестатические члены. В нестатическом классе может быть много применений статических членов. Обычно используется фабрика классов:

public class SomeClass
{
    public int SomeInt { get; set; }

    public static SomeClass Create(int defaultValue)
    {
        SomeClass result = new SomeClass();
        result.SomeInt = defaultValue;
        return result;
    }
}
13
ответ дан 3 December 2019 в 15:35
поделиться

Многие классы имеют как экземпляры, так и статические методы. Например, строка имеет:

String.Format(string, arg0, arg1, arg2) // static method

и

String myString = "    Hello world!";
myString = myString.Substring(4);       // instance method

Если вы спрашиваете, почему и классу, и методу требуется ключевое слово static, это просто по дизайну. Я понимаю, о чем вы спрашиваете, если класс статичен, тогда, конечно, все методы также статичны, кажется излишним, чтобы поместить его туда дважды. Не знаю, есть ли для этого веская причина или нет.

3
ответ дан 3 December 2019 в 15:35
поделиться

Вот официальная горячая точка / MSDN, чтобы узнать о статических классах

Основные возможности статических классов являются:
* Они содержат только статические элементы.
* Их нельзя создать.
* Они опломбированы.
* Они не могут содержать конструкторы экземпляров

В основном статический класс идентичен «нормальному» / нестатическому классу, который имеет только статические методы и частный ctor. Пометка его как статического помогает прояснить намерение и помогает компилятору выполнить некоторые проверки во время компиляции, чтобы запретить определенные вещи, например, запретить создание экземпляров.

Реальное использование, о котором я могу думать: использовать его для размещения или как способ организации

  • служебные методы (методы, не связанные ни с одним экземпляром типа), например, методы Math для минимума и максимума
  • методы расширения, например StopWatchExtensions для метода сброса на StopWatch
6
ответ дан 3 December 2019 в 15:35
поделиться

Статические классы доступны только начиная с C # 2 и выше. В C # 1 вам нужно будет запечатать свой класс и указать, что он не может быть создан, добавив частный конструктор для получения такого поведения.

3
ответ дан 3 December 2019 в 15:35
поделиться

Когда вы объявляете класс как static :

  • Разрешено иметь только статические члены ,
  • Он не может может быть создан (у него нет открытого конструктора), и
  • It не может быть унаследован (запечатан).

Любой класс, который не объявлен как статический, может быть создан, унаследован и могут иметь нестатические элементы.

2
ответ дан 3 December 2019 в 15:35
поделиться

Статический класс в основном такой же, как нестатический класс, но с одним отличием: статический класс не может быть создан. Другими словами, вы не можете использовать ключевое слово new для создания переменной типа класса. Поскольку нет переменной экземпляра, вы получаете доступ к членам статического класса, используя само имя класса.

public static class Storage
{
   public static string filePath { get; set; }
}

в этом случае класс не обязательно должен быть создан. Так же, как и путь к файлу, он будет занимать уникальное значение класса Storage. для всего объекта.

public class Storage
{
    private void Storage {};
    public static string filePath { get; set; }
}  

в этом случае класс нестатичен, необходимо создать экземпляр

1
ответ дан 3 December 2019 в 15:35
поделиться

Как известно, переменные и функции имеют два типа - экземпляр и класс.

Статический класс - имеет только переменные класса без переменных экземпляра.

Следовательно, не может быть инстанцирован, доступен только Classname.method().

В нем присутствуют только частные конструкторы без публичного конструктора.

В статическом классе присутствуют только статические члены.

0
ответ дан 3 December 2019 в 15:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: