Вы можете использовать статический метод без создания экземпляра этого класса просто с помощью class_name.static_method_name ();
Джавед Акрам
На уровне программирования у нас возникает ощущение, что мы можем вызывать статический метод, не создавая экземпляр класса / типа. Внутренне это не так. CLR внутренне управляет специальным экземпляром с именем type instance для управления вызовом статических методов. Пожалуйста, посмотрите этот ответ. Это так интригующе.
RBT
Ответы:
313
staticФункция, в отличие от обычной ( например , функции), не связанный с экземпляром класса.
staticКласс представляет собой класс , который может содержать только staticчлен, и , следовательно , не может быть реализован.
Так это как метод класса вместо метода экземпляра?
Моше
4
@ Моше: Точно. При использовании статического метода вам не нужен экземпляр класса для вызова метода, только класс.
Двоичный беспорядок
3
Но есть ли какое-то техническое ограничение, которое препятствует вызову статического метода в экземпляре? Если компилятор это допустит, в чем опасность его доступности?
kroonwijk
2
@kroon: Это не имеет никакого смысла. Методы экземпляра на самом деле просто принимают экземпляр в качестве скрытого первого параметра. Статические методы не делают. Смотрите мое сообщение в блоге: blog.slaks.net/2011/06/open-delegates-vs-closed-delegates.html
SLaks
Где «StaticMethod» - это метод класса, а «InstanceMethod» - это метод экземпляра класса SomeClass
Усман Юнас,
26
С другой точки зрения: учтите, что вы хотите внести некоторые изменения в одну строку. например, вы хотите сделать буквы заглавными и так далее. Вы делаете другой класс с именем «Инструменты» для этих действий. создание экземпляра класса «Инструменты» не имеет смысла, потому что в этом классе нет доступных сущностей (сравните с классом «Персона» или «Учитель»). Поэтому мы используем статическое ключевое слово для того, чтобы использовать класс «Инструменты», не создавая этого экземпляра, и когда вы нажимаете точку после имени класса («Инструменты»), вы можете получить доступ к нужным методам.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1{classProgram{staticvoidMain(string[] args){Console.WriteLine(Tools.ToUpperCase("Behnoud Sherafati"));Console.ReadKey();}}publicstaticclassTools{publicstaticstringToUpperCase(string str){return str.ToUpper();}}}
Использование «внесения изменений в строку» является плохим примером - строки неизменны и не могут быть изменены. Но, в противном случае, объяснение имеет смысл (замена неизменяемого класса на строку)
Flydog57
13
Статический метод, поле, свойство или событие вызывается в классе, даже если экземпляр класса не создан. Если какие-либо экземпляры класса созданы, их нельзя использовать для доступа к статическому члену. Существует только одна копия статических полей и событий, и статические методы и свойства могут обращаться только к статическим полям и статическим событиям. Статические члены часто используются для представления данных или расчетов, которые не меняются в зависимости от состояния объекта; например, математическая библиотека может содержать статические методы для вычисления синуса и косинуса. Статические члены класса объявляются с использованием ключевого слова static перед возвращаемым типом мембраны.
Статическая функция означает, что она связана с классом (не конкретным экземпляром класса, а самим классом) и может быть вызвана, даже если экземпляры класса не существуют.
Статический класс означает, что класс содержит только статические члены.
Когда вы добавляете «статическое» ключевое слово в метод, это означает, что базовая реализация дает одинаковый результат для любого экземпляра класса. Излишне говорить, что результат зависит от изменения значений параметров.
Статическая переменная не связана с объектом класса. Доступ к нему можно получить с помощью имени класса. Весь объект класса будет иметь общую статическую переменную.
Делая функцию статической, она ограничит доступ этой функции в этом файле.
Ядро статического ключевого слова, которое у вас будет только одна копия в ОЗУ этого (метод / переменная / класс), которая будет общей для всех вызовов
Ключевое слово static при применении к классу указывает компилятору создать один экземпляр этого класса. Тогда невозможно «создать» один или несколько экземпляров класса. Все методы в статическом классе должны быть объявлены как статические.
Возможно и часто желательно иметь статические методы нестатического класса. Например, метод фабрики, когда создается экземпляр другого класса, часто объявляется статическим, поскольку это означает, что конкретный экземпляр класса, содержащий метод фактора, не требуется.
Для хорошего объяснения того, как, когда и где см MSDN
Нет, статический класс никогда не создается. Учитывая , что все в нем статична, почему вы хотите , чтобы создать его экземпляр?
Джон Скит
1
У staticкласса вообще нет экземпляра.
SLaks
4
Извините, ребята, я не понимаю ... Я сказал, что создан один экземпляр, и вы не можете создать новый. Конечно, создается один статический экземпляр, иначе код не будет вызываться?
Дэйв Аркли
2
У статического класса есть экземпляр, фактически два, они просто не являются экземплярами типа. Статический класс будет существовать в куче как объект типа [Foo] (таблица поиска метода и т. Д. Для JIT) и специальный объект System.Type, используемый для инициализации.
Маккейнц
Класс может быть объявлен статическим, что указывает на то, что он содержит только статические члены. Невозможно создать экземпляры статического класса, используя ключевое слово new. Статические классы загружаются автоматически общеязыковой средой (CLR) .NET Framework, когда загружается программа или пространство имен, содержащее класс.
Ответы:
static
Функция, в отличие от обычной ( например , функции), не связанный с экземпляром класса.static
Класс представляет собой класс , который может содержать толькоstatic
член, и , следовательно , не может быть реализован.Например:
Чтобы позвонить
InstanceMethod
, вам нужен экземпляр класса:источник
С другой точки зрения: учтите, что вы хотите внести некоторые изменения в одну строку. например, вы хотите сделать буквы заглавными и так далее. Вы делаете другой класс с именем «Инструменты» для этих действий. создание экземпляра класса «Инструменты» не имеет смысла, потому что в этом классе нет доступных сущностей (сравните с классом «Персона» или «Учитель»). Поэтому мы используем статическое ключевое слово для того, чтобы использовать класс «Инструменты», не создавая этого экземпляра, и когда вы нажимаете точку после имени класса («Инструменты»), вы можете получить доступ к нужным методам.
источник
Статический метод, поле, свойство или событие вызывается в классе, даже если экземпляр класса не создан. Если какие-либо экземпляры класса созданы, их нельзя использовать для доступа к статическому члену. Существует только одна копия статических полей и событий, и статические методы и свойства могут обращаться только к статическим полям и статическим событиям. Статические члены часто используются для представления данных или расчетов, которые не меняются в зависимости от состояния объекта; например, математическая библиотека может содержать статические методы для вычисления синуса и косинуса. Статические члены класса объявляются с использованием ключевого слова static перед возвращаемым типом мембраны.
источник
Статическая функция означает, что она связана с классом (не конкретным экземпляром класса, а самим классом) и может быть вызвана, даже если экземпляры класса не существуют.
Статический класс означает, что класс содержит только статические члены.
источник
Вскоре вы не можете создать экземпляр статического класса: Пример:
Вы не можете сделать так:
Вы можете сделать только:
источник
Когда вы добавляете «статическое» ключевое слово в метод, это означает, что базовая реализация дает одинаковый результат для любого экземпляра класса. Излишне говорить, что результат зависит от изменения значений параметров.
источник
Статическая переменная не связана с объектом класса. Доступ к нему можно получить с помощью имени класса. Весь объект класса будет иметь общую статическую переменную.
Делая функцию статической, она ограничит доступ этой функции в этом файле.
источник
Ядро статического ключевого слова, которое у вас будет только одна копия в ОЗУ этого (метод / переменная / класс), которая будет общей для всех вызовов
источник
Ключевое слово static при применении к классу указывает компилятору создать один экземпляр этого класса. Тогда невозможно «создать» один или несколько экземпляров класса. Все методы в статическом классе должны быть объявлены как статические.
Возможно и часто желательно иметь статические методы нестатического класса. Например, метод фабрики, когда создается экземпляр другого класса, часто объявляется статическим, поскольку это означает, что конкретный экземпляр класса, содержащий метод фактора, не требуется.
Для хорошего объяснения того, как, когда и где см MSDN
источник
static
класса вообще нет экземпляра.