Class StaticDemo

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. События представляют собой унифицированный шаблон привязки реализаций обратных вызовов – даже по нескольку экземпляров сразу – к коду, инициирующему обратный вызов.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: