В С# какая разница между:
public static class ClassName {}
и
public class ClassName {}
В С# какая разница между:
public static class ClassName {}
и
public class ClassName {}
Статический класс не может быть создан и может содержать только статические элементы. Следовательно, вызовы для статического класса следующие: MyStaticClass.MyMethod(...)
или MyStaticClass.MyConstant
.
Нестационарный класс может быть создан и может содержать нестатические элементы (конструкторы экземпляров, деструктор, индексаторы). Нестатический член нестатического класса может быть вызван только через объект:
MyNonStaticClass x = new MyNonStaticClass(...);
x.MyNonStaticMethod(...);
Во-первых, комментарий к ответу спросил о том, что означает "статический". В терминах С# "статический" означает "относящийся к самому типу, а не к экземпляру типа". Вы получаете доступ к статическому члену (из другого типа), используя имя типа вместо ссылки или значения. Например:
// Static method, so called using type name
Guid someGuid = Guid.NewGuid();
// Instance method, called on a value
string asString = someGuid.ToString();
Теперь статические классы...
Статические классы обычно используются как классы "полезности". Канонический пример, вероятно, System.Math
. Не имеет смысла создавать экземпляр математики - это просто "есть". Несколько правил (как "can", так и "can not" ):
object
. Вы не можете указать другой базовый тип или сделать статический класс реализацией интерфейса.abstract
самостоятельно.sealed
самостоятельно.Статический класс также не может быть унаследован, а нестатический класс со статическими членами может быть унаследован от.
public static class ClassName {}
staic class похож на глобальную переменную, вы можете использовать ее в любом месте своего кода, не создавая экземпляров. Пример. ИмяКласса. После оператора точки вы можете использовать любое свойство или функцию.
public class ClassName {}
Но если у вас есть нестатический класс, вам нужно создать экземпляр этого класса. Пример.
ClassName classNameObject = new ClassName();
Все методы/свойства в статическом классе должны быть статическими, тогда как класс "нормальный" может содержать сочетание экземпляров и статических методов.
Статический класс может содержать только статические члены.
Статический член может использоваться без создания экземпляра класса.
Вы не можете создавать (ставить объекты) статический класс. И он может содержать только статические элементы.
Пример: System.Math
Статические классы и члены используются для создания данных и методов, к которым можно получить доступ, не создавая экземпляр (используя ключевое слово new
, у них не может быть конструктора) класса.
Статические классы могут быть объявлены, когда нет зависимости от собственного идентификатора объекта, поэтому статический класс должен содержать только статические члены.
Эти классы загружаются CLR, когда загружается программа или пространство имен, содержащее класс.
Они также запечатаны, не могут быть унаследованы от.
http://www.javaworld.com/javaworld/javaqa/1999-08/01-qa-static2.html - очень хорошая статья об этом. Это для Java. Но я думаю, что концепция должна также совпадать с С#.
Статическая переменная в c
переменная, локальная для класса, как автоматические переменные но статическая переменная не исчезает, поскольку функция больше не активна. Их значения сохраняются. Если управление возвращается, статические переменные имеют одинаковое значение
статическая функция в c функции, которые не видны для функций в других файлах.
* статические элементы данных в cpp * члены данных могут быть переменными или функциями в cpp static применяется для обоих элементов данных сам класс может быть статическим "Существует только одна копия статических членов данных, разделяемых всеми объектами этого класса" члены статических данных могут обращаться к статическим элементам данных
статический класс этот класс не может создавать объекты