класс (Справочник по C#)
Обновлен: Ноябрь 2007
Классы объявляются с помощью ключевого слова class, как показано в следующем примере.
class TestClass
{
// Methods, properties, fields, events, delegates
// and nested classes go here.
}
Заметки
В отличие от C++, в C# допускается только одиночное наследование. Другими словами, класс может наследовать реализацию только от одного базового класса. Однако класс может реализовать несколько интерфейсов. В приведенной ниже таблице приведены примеры наследования класса и реализации интерфейса.
Наследование |
Пример |
---|---|
Отсутствует |
class ClassA { } |
Одиночный |
class DerivedClass: BaseClass { } |
Отсутствует, реализует два интерфейса |
class ImplClass: IFace1, IFace2 { } |
Одиночное, реализует один интерфейс |
class ImplDerivedClass: BaseClass, IFace1 { } |
Во вложенных классах разрешены только следующие уровни доступа: защищенный и закрытый.
Кроме того, можно объявить универсальные классы, имеющие параметры типа; дополнительные сведения см. в разделе Универсальные классы.
Класс может содержать объявления следующих членов.
Пример
В следующем примере показано объявление полей, конструкторов и методов классов. В нем также демонстрируется создание объекта и печать данных экземпляра. В этом примере объявляются два класса — класс Child, который содержит два закрытых поля (name и age) и два открытых метода. Второй класс, TestClass, используется для хранения 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) поле "Возраст" по умолчанию было инициализировано с помощью нулевого значения.
Спецификация языка C#
Дополнительные сведения см. в следующих разделах документа Спецификация языка C#:
1.6 Классы и объекты
3.4.4 Члены классов
4.2.1Типы классов
10 Классы
См. также
Основные понятия
Руководство по программированию в C#
Ссылки
Ссылочные типы (Справочник по C#)