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:

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 , Childzawiera dwa pola prywatne (name i age), dwa konstruktory publiczne i jedną metodę publiczną. Druga klasa , StringTestjest 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 privateelementu , 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#.

Zobacz też