класс (Справочник по C#)
Классы объявляются с помощью ключевого слова class , как показано в следующем примере:
Комментарии
В C# допускается только одиночное наследование. Другими словами, класс может наследовать реализацию только от одного базового класса. Однако класс может реализовывать несколько интерфейсов. В таблице ниже приведены примеры наследования класса и реализации интерфейса.
Наследование | Пример |
---|---|
Нет | class ClassA |
Single | 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(", 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#.