Что это значит, когда вы добавляете ключевое слово static в метод?
public static void doSomething(){
//Well, do something!
}
Можете ли вы добавить ключевое слово static
в класс? Что это значит?
Что это значит, когда вы добавляете ключевое слово static в метод?
public static void doSomething(){
//Well, do something!
}
Можете ли вы добавить ключевое слово static
в класс? Что это значит?
Функция A static
, в отличие от обычной (экземплярной) функции, не связана с экземпляром класса.
A static
class - это класс, который может содержать только члены static
и поэтому не может быть создан.
Например:
class SomeClass {
public int InstanceMethod() { return 1; }
public static int StaticMethod() { return 42; }
}
Чтобы вызвать InstanceMethod
, вам понадобится экземпляр класса:
SomeClass instance = new SomeClass();
instance.InstanceMethod(); //Fine
instance.StaticMethod(); //Won't compile
SomeClass.InstanceMethod(); //Won't compile
SomeClass.StaticMethod(); //Fine
С другой точки зрения: Подумайте, что вы хотите внести некоторые изменения в одну строку. например, вы хотите сделать буквы Uppercase и так далее. вы делаете другой класс под названием "Инструменты" для этих действий. нет смысла делать экземпляр класса "Инструменты", потому что в этом классе нет какого-либо сущности (по сравнению с классом "Человек" или "Учитель" ). Так мы используем ключевое слово static, чтобы использовать класс "Инструменты", не делая никаких экземпляров этого, и когда вы нажимаете точку после имени класса ( "Инструменты" ), вы можете получить доступ к тем методам, которые вы хотите.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Tools.ToUpperCase("Behnoud Sherafati"));
Console.ReadKey();
}
}
public static class Tools
{
public static string ToUpperCase(string str)
{
return str.ToUpper();
}
}
}
Статический метод, поле, свойство или событие могут быть вызваны в классе, даже если экземпляр класса не был создан. Если создаются какие-либо экземпляры класса, они не могут использоваться для доступа к статическому члену. Существует только одна копия статических полей и событий, а статические методы и свойства могут иметь доступ только к статическим полям и статическим событиям. Статические элементы часто используются для представления данных или вычислений, которые не изменяются в ответ на состояние объекта; например, математическая библиотека может содержать статические методы вычисления синуса и косинуса. Статические члены класса объявляются с использованием ключевого слова static перед типом возврата membe
Статическая функция означает, что она связана с классом (а не с конкретным экземпляром класса, но сам класс), и его можно вызвать, даже если экземпляры классов не существуют.
Статический класс означает, что класс содержит только статические члены.
Вскоре вы не сможете создать экземпляр статического класса: Пример:
static class myStaticClass
{
public static void someFunction()
{ /* */ }
}
Вы не можете сделать так:
myStaticClass msc = new myStaticClass(); // it will cause an error
Вы можете сделать только:
myStaticClass.someFunction();
Когда вы добавляете ключевое слово "статическое" к методу, это означает, что базовая реализация дает тот же результат для любого экземпляра класса. Разумеется, результат зависит от изменения значения параметров
Статическая переменная не связывается с объектом класса. Доступ к нему возможен с помощью имени класса. Весь объект класса будет разделять статическую переменную.
Сделав функцию статической, она будет ограничивать доступ к этой функции внутри этого файла.
Ядро статического ключевого слова, которое у вас будет только одна копия в ОЗУ этого (метод/переменная/класс) который поделился со всеми звонками
Статическое ключевое слово, применяемое к классу, сообщает компилятору создать один экземпляр этого класса. Нельзя тогда "новый" один или несколько экземпляров класса. Все методы в статическом классе сами должны быть объявлены статическими.
Возможно, и часто желательно, иметь статические методы нестатического класса. Например, метод factory при создании экземпляра другого класса часто объявляется статическим, так как это означает, что конкретный экземпляр класса, содержащего факторный метод, не требуется.
Для хорошего объяснения того, как, когда и где см. MSDN