class (odwołanie w C#)
Klasy są deklarowane przy użyciu słowa kluczowego class
, jak pokazano w poniższym przykładzie:
class TestClass
{
// Methods, properties, fields, events, delegates
// and nested classes go here.
}
Uwagi
Tylko pojedyncze dziedziczenie jest dozwolone w języku C#. Innymi słowy, klasa może dziedziczyć implementację tylko z jednej klasy bazowej. Klasa może jednak zaimplementować więcej niż jeden interfejs. W poniższej tabeli przedstawiono przykłady dziedziczenia klas i implementacji interfejsu:
Dziedziczenie | Przykład |
---|---|
Brak | class ClassA { } |
Pojedynczy | class DerivedClass : BaseClass { } |
Brak, implementuje dwa interfejsy | class ImplClass : IFace1, IFace2 { } |
Pojedynczy, implementuje jeden interfejs | class ImplDerivedClass : BaseClass, IFace1 { } |
Klasy zadeklarowane bezpośrednio w przestrzeni nazw, a nie zagnieżdżone w innych klasach, mogą być publiczne lub wewnętrzne. Klasy są internal
domyślnie.
Składowe klasy, w tym klasy zagnieżdżone, mogą być publiczne, chronione wewnętrznych, chronionych, wewnętrznych, prywatnych lub prywatnych. Członkowie są private
domyślnie.
Aby uzyskać więcej informacji, zobacz Modyfikatory dostępu.
Można zadeklarować klasy ogólne, które mają parametry typu. Aby uzyskać więcej informacji, zobacz Klasy ogólne.
Klasa może zawierać deklaracje następujących elementów członkowskich:
Indexers (Indeksatory)
Przykład
W poniższym przykładzie pokazano deklarowanie pól klas, konstruktorów i metod. Demonstruje również tworzenie wystąpień obiektów i drukowanie danych wystąpienia. W tym przykładzie zadeklarowane są dwie klasy. Pierwsza klasa , Child
zawiera dwa pola prywatne (name
i age
), dwa konstruktory publiczne i jedną metodę publiczną. Druga klasa , StringTest
jest używana do przechowywania 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.
*/
Komentarze
Zwróć uwagę, że w poprzednim przykładzie dostęp do pól prywatnych (name
i age
) można uzyskać tylko za pośrednictwem publicznej Child
metody klasy. Na przykład nie można wydrukować nazwy elementu podrzędnego z metody przy użyciu instrukcji podobnej Main
do następującej:
Console.Write(child1.name); // Error
Uzyskiwanie dostępu do prywatnych elementów członkowskich z Child
klasy Main
byłoby możliwe tylko wtedy, gdy Main
były elementem członkowskim klasy.
Typy zadeklarowane wewnątrz klasy bez domyślnego modyfikatora dostępu do private
elementu , więc składowe danych w tym przykładzie nadal byłyby private
, gdyby słowo kluczowe zostało usunięte.
Na koniec zwróć uwagę, że dla obiektu utworzonego przy użyciu konstruktora bez parametrów (child3
) age
domyślnie zainicjowano pole do zera.
specyfikacja języka C#
Aby uzyskać więcej informacji, zobacz Specyfikacja języka C#. Specyfikacja języka jest ostatecznym źródłem informacji o składni i użyciu języka C#.