Я искал статические переменные в C #, но до сих пор не понимаю, в чем их смысл. Кроме того, если я попытаюсь объявить переменную внутри метода, это не даст мне на это разрешения. Зачем?
Я видел несколько примеров статических переменных. Я видел, что нам не нужно создавать экземпляр класса для доступа к переменной, но этого недостаточно, чтобы понять, как он используется и когда его использовать.
Вторая вещь
class Book
{
public static int myInt = 0;
}
public class Exercise
{
static void Main()
{
Book book = new Book();
Console.WriteLine(book.myInt); // Shows error. Why does it show me error?
// Can't I access the static variable
// by making the instance of a class?
Console.ReadKey();
}
}
c#
static
static-variables
Картик Патель
источник
источник
Book
) no через instance (book
), так что это более простое решениеBook.myInt
.Ответы:
static
Переменная разделяет значение его среди всех экземпляров класса.Пример без объявления статическим:
Объяснение: Если вы посмотрите на приведенный выше пример, я просто объявляю
int
переменную. Когда я запускаю этот код, на выходе будет10
и10
. Это просто.Теперь давайте посмотрим на статическую переменную здесь; Я объявляю переменную как
static
.Пример со статической переменной:
Теперь, когда я запускаю приведенный выше код, на выходе будет
10
и15
. Таким образом, значение статической переменной распределяется между всеми экземплярами этого класса.источник
В C # вообще нет статических переменных . Вы можете объявить статическое поле в определении конкретного типа через C #. Статическое поле - это состояние, общее для всех экземпляров определенного типа. Следовательно, область статического поля - весь тип. Вот почему вы не можете объявить статическое поле внутри метода - метод сам по себе является областью действия, а элементы, объявленные в методе, должны быть недоступны за границей метода.
источник
статические переменные используются, когда требуется только одна копия переменной. поэтому, если вы объявляете переменную внутри метода, такая переменная не используется, она становится локальной только для работы.
пример статики
Переменные, объявленные статическими, обычно используются всеми экземплярами класса.
Переменные, объявленные статическими, обычно используются всеми экземплярами класса. Когда вы создаете несколько экземпляров класса VariableTest, эта постоянная переменная является общей для всех. Таким образом, в любой момент времени в постоянной переменной будет содержаться только одно строковое значение.
Поскольку для всех экземпляров доступна только одна копия переменной, код this.permament приведет к ошибкам компиляции, потому что можно вспомнить, что this.variablename относится к имени переменной экземпляра. Таким образом, статические переменные должны быть доступны напрямую, как указано в коде.
источник
Некоторые примеры "реального мира" для статических переменных:
создание класса, в котором вы можете достичь жестко запрограммированных значений для своего приложения. Подобно перечислению, но с большей гибкостью в отношении типа данных.
Широко известный синглтон, это позволяет контролировать наличие только одного экземпляра класса. Это очень полезно, если вы хотите получить к нему доступ во всем приложении, но не передавать его каждому классу, чтобы этот класс мог его использовать.
и вот как вы бы назвали менеджер текстур
По поводу вашего последнего вопроса: вы имеете в виду ошибку компилятора CS0176 . Я попытался найти больше информации об этом, но смог найти только то, что говорилось об этом в msdn:
источник
Статические переменные используются, когда требуется только одна их копия. Позвольте мне объяснить это на примере:
Теперь мы создали 2 экземпляра для нашего
class
круга, то есть созданы 2 набора копий_PI
вместе с другими переменными. Скажем, если у нас будет много экземпляров этого класса,_PI
будет создано несколько копий , занимающих память. Поэтому в таких случаях лучше сделать такие переменные похожими_PI
static
и оперировать ими.Теперь независимо от того, сколько экземпляров сделано для
class
круга, существует только одна копия переменной,_PI
сохраняющая нашу память.источник
Статические классы не требуют, чтобы вы создавали объект этого класса / инстанциировали их, вы можете префикс ключевого слова C # static перед именем класса, чтобы сделать его статическим.
Помните: мы не создаем экземпляры класса Console, класса String, класса Array.
источник
Начиная с этого примера @Kartik Patel, я немного изменил, может быть, теперь стало более ясно о статической переменной
Переменная класса VS переменная экземпляра в C #
Статические члены класса C # ИЛИ переменная класса
}
https://en.wikipedia.org/wiki/Class_variable
https://en.wikipedia.org/wiki/Instance_variable
https://en.wikipedia.org/wiki/Static_variable
https://javaconceptoftheday.com/class-variables-and-instance-variables-in-java/?fbclid=IwAR1_dtpHzg3bC5WlGQGdgewaTvuOI6cwVeFUtTV8IZuGTj1qH5PmKGwX0yM
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/static-classes-and-static-class-members
Члены данных и функции-члены, которые работают с экземпляром типа, называются членами экземпляра. Метод ToString типа int (например) является примерами членов экземпляра. По умолчанию члены являются членами экземпляра. Члены данных и функции-члены, которые работают не с экземпляром типа, а с самим типом, должны быть помечены как статические. Методы Test.Main и Console.WriteLine являются статическими. Класс Console на самом деле является статическим классом, что означает, что все его члены статичны. Фактически вы никогда не создаете экземпляры консоли - одна консоль используется для всего приложения.
источник
В ответ на вопрос "когда это использовать?" вопрос:
Я часто использую статическую переменную (класс), чтобы присвоить уникальный идентификатор экземпляра каждому экземпляру класса. Я использую один и тот же код в каждом классе, это очень просто:
Это иллюстрирует пару моментов, касающихся статических переменных и методов:
Я считаю это полезным, потому что я разрабатываю приложения, в которых используются рои объектов, и хорошо иметь возможность отслеживать, сколько их было создано, а также отслеживать / запрашивать отдельные экземпляры.
Я также использую переменные класса для отслеживания таких вещей, как итоговые и средние значения свойств экземпляров, о которых можно сообщать в режиме реального времени. Я думаю, что класс - хорошее место для хранения сводной информации обо всех экземплярах класса.
источник
Попробуйте вызвать его напрямую с именем класса
Book.myInt
источник
При сравнении с переменными сеанса статические переменные будут иметь одинаковое значение для всех пользователей, учитывая, что я использую приложение, развернутое на сервере. Если два пользователя обращаются к одной и той же странице приложения, то статическая переменная будет содержать последнее значение, и одно и то же значение будет предоставлено обоим пользователям, в отличие от переменных сеанса, которые различны для каждого пользователя. Итак, если вам нужно что-то общее и одинаковое для всех пользователей, включая значения, которые предполагается использовать в коде приложения, используйте только static.
источник
Вам не нужно создавать экземпляр объекта, потому что yau будет использовать статическую переменную: Console.WriteLine (Book.myInt);
источник
Статическая переменная сохраняет свое предыдущее значение до выхода из программы. Статический используется путем прямого вызова class_Name.Method () или class_Name.Property. Ссылка на объект не требуется. Наиболее популярным использованием static является класс Math в C #. Math.Sin (), Math.Cos (), Math.Sqrt ().
источник