Поделиться через


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

Класс — это конструктор, который позволяет создавать свои собственные пользовательские типы путем группирования переменных других типов, методов и событий. Класс подобен чертежу. Он определяет данные и поведение типа. Если класс не объявлен статическим, то клиентский код может его использовать, создав объекты или экземпляры, назначенные переменной. Переменная остается в памяти, пока все ссылки на нее не выйдут из области видимости. В это время среда 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 that takes no arguments. 
    public Person()
    {
        name = "unknown";
    }

    // Constructor that takes one argument. 
    public Person(string nm)
    {
        name = nm;
    }

    // Method 
    public void SetName(string newName)
    {
        name = newName;
    }
}
class TestPerson
{
    static void Main()
    {
        // Call the constructor that has no parameters.
        Person person1 = new Person();
        Console.WriteLine(person1.name);

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

        // Call the constructor that has one parameter.
        Person person2 = new Person("Sarah Jones");
        Console.WriteLine(person2.name);

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

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

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

См. также

Ссылки

Полиморфизм (Руководство по программированию на C#)

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

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

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

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

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

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

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

Объектно-ориентированное программирование (C# и Visual Basic)