Static class SampleClass
Статические классы и их члены
Public StudentName(string first, string last)
Public class StudentName
{ // The default constructor has no parameters. The default
// constructor is invoked in the processing of object
// initializers. You can test this by changing the access
// modifier from public to private. The declarations in Main that
// use object initializers will fail.
public StudentName() { }
// The following constructor has parameters for two of the three
// properties.
{ FirstName = first;
LastName = last;
}
// Properties.
public string FirstName { get; set; }
public string LastName { get; set; }
public int ID { get; set; }
public override string ToString()
{ return FirstName + " " + ID;
}
}
Статический член класса – это поле, свойство или метод, которое совместно используется всеми экземплярами этого класса.
Определение статического члена:
{ // Определение статического поля
public static string SampleString = "Sample String";
...
}
Чтобы получить доступ к статическому члену, можно использовать имя класса без создания объекта этого класса:
Console.WriteLine(SampleClass.SampleString);
Статические (совместно используемые) классы в C# и модули в Visual Basic могут содержать только статические члены. Нельзя создать экземпляр статического класса. Статические члены также не могут обращаться к нестатическим полям, свойствам или методам.
Если таким членом является поле или свойство, оно имеет одинаковое значение для всех экземпляров этого класса. Чтобы убедиться в этом, рассмотрим простой пример [2 – Фаронов].
Пример 14.2. Иллюстрация статических членов класса. (Проверено)
using System;
{ public class A // Объявление класса
{ private static int N = 0; // Объявление статического поля
public A() {N++;} // Объявление конструктора
public int Get_N() {return N;} // Объявление метода
}
public static void Main()
{ A a1 = new A(), a2 = new A(); // Создание объектов
Console.WriteLine("a1.N = {0}, a2.N = {1}",
a1.Get_N(), a2.Get_N()); // Выполнение метода
Console.ReadLine();
}
}
// Вывод: a1.N = 2, a2.N = 2
В этой программе перекрытый конструктор A при каждом срабатывании увеличивает на 1 значение закрытого поля N.
Метод Get_N() не является статическим. Однако и для объекта a1, и для а2 он возвращает одно и то же значение 2. Происходит это потому, что метод обращается к одному и тому же статическому полю. В этом отношении было бы правильнее объявить метод с модификатором static – такие методы нельзя вызывать как члены объекта, их следует вызывать как члены класса:
Console.WriteLine("a1.N = {0}, a2.N - {1}",
A.Get_N(), A.Get_N());
В этом варианте оператора явно указывается, что речь идет об одном и том же статическом поле.
Делегаты обеспечивают встроенный, поддерживаемый языком механизм определения и выполнения обратных вызовов. Их гибкость позволяет определять точную сигнатуру обратного вызова, и эта информация становится частью самого типа делегата. Анонимные функции – форма делегатов, позволяющая сократить некоторую часть синтаксиса делегатов, который во многих случаях бывает громоздким и утомительным. На делегатах построена поддержка механизма событий в С# и платформе.NET. События представляют собой унифицированный шаблон привязки реализаций обратных вызовов – даже по нескольку экземпляров сразу – к коду, инициирующему обратный вызов.