Классы (руководство по программированию на C#)

Обновлен: Июль 2008

Класс — это конструктор, который позволяет создавать свои собственные пользовательские типы путем группирования переменных других типов, методов и событий. Класс подобен чертежу. Он определяет данные и поведение типа. Если класс не объявлен статическим, то клиентский код может его использовать, создав объекты или экземпляры, назначенные переменной. Переменная остается в памяти, пока все ссылки на нее не выйдут из области видимости. В это время среда CLR помечает ее пригодной для сборщика мусора. Если класс объявляется статическим, то в памяти остается только одна копия и клиентский код может получить к ней доступ только посредством самого класса, а не переменной экземпляра. Дополнительные сведения см. в разделе Статические классы и члены статических классов (руководство по программированию в C#).

В отличие от структур классы поддерживают наследование, фундаментальную характеристику объектно-ориентированного программирования. Дополнительные сведения см. в разделе Наследование (Руководство по программированию в C#).

Объявление классов

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

public class Customer
{
    //Fields, properties, methods and events go here...
}

Ключевому слову class предшествует уровень доступа. Поскольку в данном случае используется public, любой может создавать объекты из этого класса. Имя класса указывается после ключевого слова class. Оставшаяся часть определения является телом класса, в котором задаются данные и поведение. Поля, свойства, методы и события в классе обозначаются термином члены класса.

Создание объектов

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

Объекты можно создавать с помощью ключевого слова new, за которым следует имя класса, на котором будет основан объект:

Customer object1 = new Customer();

При создании экземпляра класса ссылка на этот объект передается программисту. В предыдущем примере object1 является ссылкой на объект, основанный на Customer. Эта ссылка указывает на новый объект, но не содержит данные этого объекта. Фактически, можно создать ссылку на объект без создания самого объекта:

Customer object2;

Создание таких ссылок, которые не указывают на объект, не рекомендуется, так как попытка доступа к объекту по такой ссылке приведет к сбою во время выполнения. Однако такую ссылку можно сделать указывающей на объект, создав новый объект или назначив ее существующему объекту:

Customer object3 = new Customer();
Customer object4 = object3;

В данном коде создаются две ссылки на объекты, которые указывают на один объект. Поэтому любые изменения объекта, выполненные посредством object3, будут видны при последующем использовании object4. Поскольку на объекты, основанные на классах, указывают ссылки, классы называют ссылочными типами.

Наследование классов

Наследование выполняется с помощью образования производных, то есть класс объявляется с помощью базового класса, от которого он наследует данные и поведение. Базовый класс задается добавлением после имени производного класса двоеточия и имени базового класса:

public class Manager : Employee
{
    // Employee fields, properties, methods and events are inherited
    // New Manager fields, properties, methods and events go here...
}

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

В отличие от C++, класс в C# может только напрямую наследовать от одного базового класса. Однако, поскольку базовый класс может сам наследовать от другого класса, класс может косвенно наследовать несколько базовых классов. Кроме того, класс может напрямую реализовать несколько интерфейсов. Дополнительные сведения см. в разделе Интерфейсы (Руководство по программированию в C#).

Класс может быть объявлен абстрактным. Абстрактный класс содержит абстрактные методы, которые имеют определение подписи, но не имеют реализации. Создавать абстрактные классы нельзя. Они могут использоваться только посредством производных классов, реализующих абстрактные методы. И наоборот, запечатанный класс не позволяет другим классам быть от него производными. Дополнительные сведения см. в разделе Абстрактные и запечатанные классы и члены классов (руководство по программированию в C#).

Определения классов можно разделить между различными исходными файлами. Дополнительные сведения см. в разделе Разделяемые классы и методы (Руководство по программированию в C#).

Описание

В следующем примере определяется открытый класс, содержащий одно поле, метод и специальный метод, вызывающий конструктор. Дополнительные сведения см. в разделе Конструкторы (руководство по программированию на C#). После этого с помощью ключевого слова new создается экземпляр класса.

Пример

public class Person
{
    // Field
    public string name;

    // Constructor
    public Person()
    {
        name = "unknown";
    }

    // Method
    public void SetName(string newName)
    {
        name = newName;
    }
}
class TestPerson
{
    static void Main()
    {
        Person person = new Person();
        Console.WriteLine(person.name);

        person.SetName("John Smith");
        Console.WriteLine(person.name);

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
/* Output:
    unknown
    John Smith
*/

Спецификация языка C#

Дополнительные сведения см. в следующих разделах документа Спецификация языка C#:

  • 1.6 Классы и объекты

  • 10 Классы

См. также

Основные понятия

Руководство по программированию в C#

Ссылки

Члены (руководство по программированию в C#)

Методы (Руководство по программированию на C#)

Конструкторы (руководство по программированию на C#)

Деструкторы (руководство по программированию в C#)

Объекты (Руководство по программированию на C#)

Журнал изменений

Дата

Журнал изменений

Причина

Июль 2008

Удалено дезориентирующее заявление о базовом доступе.