Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Ключевое слово static в C#: статические переменные, методы и классы

Ключевое слово static в C#

Это руководство объясняет ключевое слово static в C#, охватывая статические переменные, методы и классы с понятными реальными примерами.

В C# применение ключевого слова static к члену создает единственный общий экземпляр для всех объектов этого типа. Вместо того чтобы каждый экземпляр хранил свою копию, статический член существует в единственном экземпляре на тип.


Статические переменные в C#

Когда поле объявлено static, к нему можно обращаться напрямую через имя класса, не создавая объект.

using System;
namespace StaticKeyword {
    class Student {
        // статическая переменная, общая для всех студентов
        public static string department = "Computer Science";
    }
    class Program {
        static void Main(string[] args) {
            // Доступ к статическому полю через имя класса
            Console.WriteLine("Department: " + Student.department);
            Console.ReadLine();
        }
    }
}

Вывод

Department: Computer Science

Поле department разделяется всеми экземплярами Student, поэтому обращаемся как Student.department.


Статические переменные против переменных экземпляра

Переменные экземпляра принадлежат отдельным объектам, у каждого своя копия. Например:

class Student {
    public string studentName;
}
class Program {
    static void Main(string[] args) {
        Student s1 = new Student();
        Student s2 = new Student();
    }
}

Здесь s1 и s2 имеют отдельные поля studentName. В отличие от этого, статическое поле общее для всех экземпляров и доступно без создания объекта.

Пример: Статические vs экземплярные переменные

using System;
namespace StaticKeyword {
    class Student {
        public static string schoolName = "Programiz School"; // общая
        public string studentName; // уникальная
    }
    class Program {
        static void Main(string[] args) {
            Student s1 = new Student();
            s1.studentName = "Ram";
            Console.WriteLine("Name: " + s1.studentName); // экземпляр
            Console.WriteLine("School: " + Student.schoolName); // статическое
            Student s2 = new Student();
            s2.studentName = "Shyam";
            Console.WriteLine("Name: " + s2.studentName);
            Console.WriteLine("School: " + Student.schoolName);
            Console.ReadLine();
        }
    }
}

Вывод

Name: Ram
School: Programiz School
Name: Shyam
School: Programiz School

Статическое поле schoolName идентично для всех студентов, что эффективно по памяти и логически последовательно.


Статические методы в C#

Статические методы вызываются на самом классе, а не на экземпляре. Они могут обращаться только к другим статическим членам.

class Test {
    public static void Display() {
        // реализация
    }
}
class Program {
    static void Main(string[] args) {
        Test.Display();
    }
}

Все объекты Test разделяют один метод Display, поэтому вызывают его через имя класса.

Пример: Статические и нестатические методы

using System;
namespace StaticKeyword {
    class Test {
        public void Display1() {
            Console.WriteLine("Non static method");
        }
        public static void Display2() {
            Console.WriteLine("Static method");
        }
    }
    class Program {
        static void Main(string[] args) {
            Test t1 = new Test();
            t1.Display1(); // вызов экземпляра
            Test.Display2(); // статический вызов
            Console.ReadLine();
        }
    }
}

Вывод

Non static method
Static method

Примечание: Метод Main сам является статическим, позволяя запускаться без экземпляра.


Статические классы

Статический класс нельзя инстанцировать и может содержать только статические члены. Полезен для группировки вспомогательных методов.

using System;
namespace StaticKeyword {
    static class Test {
        static int a = 5;
        static void Display() {
            Console.WriteLine("Static method");
        }
        static void Main(string[] args) {
            // Test t1 = new Test(); // ❌ Ошибка компиляции
            Console.WriteLine(a);
            Display();
        }
    }
}

Попытка инстанцировать Test вызывает ошибки CS0723 и CS0712, подтверждая статическую природу.

Статические классы нельзя наследовать. Например:

static class A { /* ... */ }
// class B : A { /* ... */ } // ❌ Ошибка

Доступ к статическим членам внутри класса

Внутри того же класса можно обращаться к статическим полям и методам напрямую, без квалификатора класса.

using System;
namespace StaticKeyword {
    class Test {
        static int age = 25;
        public static void Display() {
            Console.WriteLine("Static method");
        }
        static void Main(string[] args) {
            Console.WriteLine(age); // прямой доступ
            Display(); // прямой доступ
            Console.ReadLine();
        }
    }
}

Вывод

25
Static method

Здесь age и Display используются без префикса Test..

Язык C

  1. Классы и объекты в C#: Фундаменты надёжного ООП
  2. Модификаторы доступа в C#: public, private, protected, internal и другие
  3. Ключевое слово this в C#: разбор всех сценариев использования
  4. Абстрактные классы и методы в C#: практическое руководство
  5. Вложенные классы в C#: определение, использование и наследование
  6. Частичные классы и методы в C#: понимание и применение
  7. Sealed-классы и sealed-методы в C#: когда использовать, примеры и повышение безопасности кода
  8. Ключевое слово static в Java: переменные, методы и блоки — практические примеры
  9. Полиморфизм в C++: практическое руководство
  10. Абстракция данных в C++: разделение интерфейса и реализации