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


class (Справочник по C#)

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

class TestClass
{
    // Methods, properties, fields, events, delegates
    // and nested classes go here.
}

Замечания

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

Наследование Пример
нет class ClassA { }
Одна class DerivedClass : BaseClass { }
Отсутствует, реализует два интерфейса class ImplClass : IFace1, IFace2 { }
Одиночное, реализует один интерфейс class ImplDerivedClass : BaseClass, IFace1 { }

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

Члены класса, включая вложенные классы, могут объявляться с типом доступа public, protected internal, protected, internal, private или private protected. По умолчанию члены имеют тип доступа private.

Дополнительные сведения см. в статье Модификаторы доступа.

Можно объявить универсальные классы, имеющие параметры типа. Дополнительные сведения см. в разделе Универсальные классы.

Класс может содержать объявления следующих членов:

Пример

В приведенном ниже примере показано объявление полей, конструкторов и методов класса. В нем также демонстрируется создание экземпляра объекта и печать данных экземпляра. В этом примере объявляются два класса. Первый класс, Child, содержит два частных поля (name и age), два общих конструктора и один общий метод. Второй класс, StringTest, используется для хранения Main.

class Child
{
    private int age;
    private string name;

    // Default constructor:
    public Child()
    {
        name = "N/A";
    }

    // Constructor:
    public Child(string name, int age)
    {
        this.name = name;
        this.age = age;
    }

    // Printing method:
    public void PrintChild()
    {
        Console.WriteLine("{0}, {1} years old.", name, age);
    }
}

class StringTest
{
    static void Main()
    {
        // Create objects by using the new operator:
        Child child1 = new Child("Craig", 11);
        Child child2 = new Child("Sally", 10);

        // Create an object using the default constructor:
        Child child3 = new Child();

        // Display results:
        Console.Write("Child #1: ");
        child1.PrintChild();
        Console.Write("Child #2: ");
        child2.PrintChild();
        Console.Write("Child #3: ");
        child3.PrintChild();
    }
}
/* Output:
    Child #1: Craig, 11 years old.
    Child #2: Sally, 10 years old.
    Child #3: N/A, 0 years old.
*/

Комментарии

Обратите внимание, что в предыдущем примере доступ к частным полям (name и age) возможен только с помощью общих методов класса Child. Например, имя ребенка нельзя напечатать из метода Main с помощью следующего оператора:

Console.Write(child1.name);   // Error

Получить доступ к закрытым членам класса Child из метода Main можно было бы лишь в том случае, если бы Main был членом класса.

Типы, объявленные в классе без модификатора доступа, по умолчанию являются private, поэтому члены данных в этом примере останутся private, если ключевые слова будут удалены.

Наконец, обратите внимание, что для объекта, созданного с помощью конструктора без параметров (child3), поле age по умолчанию инициализировано с нулевым значением.

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

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

См. также