Я использую знатока для своих сборок Java, который имеет плагин, названный плагин блока знатока .
Это делает то, что Ваше выяснение, но как некоторые из других предложений описывают - по существу взрывающий все зависимые банки и повторно комбинирующий их в единственную банку
Если вы посмотрите на код IL, статический класс будет абстрактный
и запечатанный
, что дает два важных качества:
Следствием первого пункта является то, что статический класс не может содержать нестатические члены. В нестатическом классе может быть много применений статических членов. Обычно используется фабрика классов:
public class SomeClass
{
public int SomeInt { get; set; }
public static SomeClass Create(int defaultValue)
{
SomeClass result = new SomeClass();
result.SomeInt = defaultValue;
return result;
}
}
Многие классы имеют как экземпляры, так и статические методы. Например, строка имеет:
String.Format(string, arg0, arg1, arg2) // static method
и
String myString = " Hello world!";
myString = myString.Substring(4); // instance method
Если вы спрашиваете, почему и классу, и методу требуется ключевое слово static, это просто по дизайну. Я понимаю, о чем вы спрашиваете, если класс статичен, тогда, конечно, все методы также статичны, кажется излишним, чтобы поместить его туда дважды. Не знаю, есть ли для этого веская причина или нет.
Вот официальная горячая точка / MSDN, чтобы узнать о статических классах
Основные возможности статических классов являются:
* Они содержат только статические элементы.
* Их нельзя создать.
* Они опломбированы.
* Они не могут содержать конструкторы экземпляров
В основном статический класс идентичен «нормальному» / нестатическому классу, который имеет только статические методы и частный ctor. Пометка его как статического помогает прояснить намерение и помогает компилятору выполнить некоторые проверки во время компиляции, чтобы запретить определенные вещи, например, запретить создание экземпляров.
Реальное использование, о котором я могу думать: использовать его для размещения или как способ организации
Статические классы доступны только начиная с C # 2 и выше. В C # 1 вам нужно будет запечатать свой класс и указать, что он не может быть создан, добавив частный конструктор для получения такого поведения.
Когда вы объявляете класс как static :
Любой класс, который не объявлен как статический, может быть создан, унаследован и могут иметь нестатические элементы.
Статический класс в основном такой же, как нестатический класс, но с одним отличием: статический класс не может быть создан. Другими словами, вы не можете использовать ключевое слово new для создания переменной типа класса. Поскольку нет переменной экземпляра, вы получаете доступ к членам статического класса, используя само имя класса.
public static class Storage
{
public static string filePath { get; set; }
}
в этом случае класс не обязательно должен быть создан. Так же, как и путь к файлу, он будет занимать уникальное значение класса Storage. для всего объекта.
public class Storage
{
private void Storage {};
public static string filePath { get; set; }
}
в этом случае класс нестатичен, необходимо создать экземпляр
Как известно, переменные и функции имеют два типа - экземпляр и класс.
Статический класс - имеет только переменные класса без переменных экземпляра.
Следовательно, не может быть инстанцирован, доступен только Classname.method().
В нем присутствуют только частные конструкторы без публичного конструктора.
В статическом классе присутствуют только статические члены.