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#.