Статические классы в C#

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

Синтаксис:

static class Class_Name
{
  // static data members 
  // static method
}

В C # статический класс содержит два типа статических членов, а именно:

  • Статические поля: поскольку статический класс всегда содержит статические поля, поэтому статические поля объявляются с использованием ключевого слова static, и к ним осуществляется прямой доступ с использованием имени класса. Память статических полей распределяется индивидуально без какой-либо связи с объектом.

    Синтаксис:

    static class Class_name 
    {
        public static nameofdatamember;
    }
    
  • Статические методы: поскольку статический класс всегда содержит статические методы, статические методы объявляются с использованием ключевого слова static. Эти методы имеют доступ только к статическим элементам данных, они не могут получить доступ к нестатическим элементам данных.

    Синтаксис:

    static class Class_name {
      public static nameofmethod()
      {
           // code 
      }
    }
    

    Пример 1:

    // C# program to illustrate the 
    // concept of static class
    using System;
      
    namespace ExampleOfStaticClass {
    
      // Creating static class
      // Using static keyword
      static class Author {
    
          // Static data members of Author
          public static string A_name = "Ankita";
          public static string L_name = "CSharp";
          public static int T_no = 84;
    
          // Static method of Author
          public static void details()
          {
              Console.WriteLine("The details of Author is:");
          }
      }
      
    	// Driver Class
      public class GFG {
    
          // Main Method
          static public void Main()
          {
    
              // Calling static method of Author
              Author.details();
    
              // Accessing the static data members of Author
              Console.WriteLine("Author name : {0} ", Author.A_name);
              Console.WriteLine("Language : {0} ", Author.L_name);
              Console.WriteLine("Total number of articles : {0} ", 
                                                    Author.T_no);
          }
      }
    }
    
    Вывод:

    Подробная информация об авторе:
    Имя автора: Анкита 
    Язык: CSharp 
    Всего статей: 84
    

    Пример 2:

    // C# программа для демонстрации 
    // принципа работы статического класса
    using System;
      
      
    // объявление статического класса
    public static class GFG {
          
        // объявление статического метода
        static void display()
        {
            Console.WriteLine("Static Method of class GFG");
        }
          
    }
      
    // пытаемся унаследовать класс GFG
    // выдаст ошибку, так как статический
    // класс не может быть унаследован
    class GFG2 : GFG {
          
        public static void Main(String[] args) {
              
              
        }
    }
    

    Ошибка времени компиляции:

    prog.cs (20,7): ошибка CS0709: `GFG2 ': невозможно унаследовать от статического класса` GFG'

    Объяснение: В приведенном выше примере у нас есть статический класс с именем Author с использованием ключевого слова static. Класс Author содержит статические поля с именами A_name , L_name и T_no , а также статический метод с именем details () . Метод статического класса просто вызывается с использованием имени его класса, например Author.details (); . Как мы знаем, статический класс не состоит из объекта, поэтому доступ к члену данных класса Author осуществляется по имени его класса, например Author.A_name , Author.L_name и Author.T_no .

    Разница между статическим и нестатическим классом

    Статический класс Нестатический класс
    Статический класс определяется с помощью ключевого слова static. Нестатический класс не определяется с помощью ключевого слова static.
    В статическом классе вам не разрешено создавать объекты. В нестатическом классе вам разрешено создавать объекты, используя ключевое слово new.
    К членам данных статического класса можно получить прямой доступ по имени его класса. Члены данных нестатического класса не получают прямого доступа по имени его класса.
    Статический класс всегда содержит статические члены. Нестатический класс может содержать как статические, так и нестатические методы.
    Статический класс не содержит конструктора экземпляра. Нестатический класс содержит конструктор экземпляра.
    Статический класс не может наследовать от другого класса. Нестатический класс может быть унаследован от другого класса.