Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W języku C#definicja typu — klasa, struktura lub rekord — jest jak strategia określająca, co może zrobić typ. Obiekt jest w zasadzie blokiem pamięci przydzielonej i skonfigurowanym zgodnie z strategią. Ten artykuł zawiera omówienie tych strategii i ich funkcji. W następnym artykule z tej serii przedstawiono obiekty.
Hermetyzacja
Hermetyzacja jest czasami nazywana pierwszym filarem lub zasadą programowania obiektowego. Klasa lub struktura może określać, jak dostępny jest każdy z jej składowych dla kodu spoza klasy lub struktury. Elementy nieprzeznaczone dla użytkowników spoza klasy lub zestawu są ukryte, aby ograniczyć potencjalne błędy kodowania lub złośliwe wykorzystanie. Aby uzyskać więcej informacji, zobacz samouczek dotyczący programowania obiektowego .
Członkowie
Elementy członkowskie typu obejmują wszystkie metody, pola, stałe, właściwości i zdarzenia. W języku C# nie ma zmiennych globalnych ani metod, ponieważ istnieją w niektórych innych językach. Nawet punkt wejścia programu, metoda Main
, musi być zadeklarowana w klasie lub strukturze (niejawnie, gdy używasz instrukcji najwyższego poziomu).
Poniższa lista zawiera wszystkie rodzaje składowych, które można zadeklarować w klasie, strukturze lub rekordzie.
- Pola formularza
- Stałe
- Właściwości
- Metody
- Konstruktory
- Zdarzenia
- Finalizatory
- Indeksatorzy
- Operatorów
- Zagnieżdżone typy
Aby uzyskać więcej informacji, zobacz Członkowie.
Dostępność
Niektóre metody i właściwości mają być wywoływane lub uzyskiwane z kodu poza klasą lub strukturą, znaną jako kod klienta. Inne metody i właściwości mogą być używane tylko w klasie lub samej struktury. Ważne jest, aby ograniczyć dostępność kodu, aby tylko zamierzony kod klienta mógł go osiągnąć. Określasz, jak dostępne są typy i ich członkowie do kodu klienta przy użyciu następujących modyfikatorów dostępu:
Domyślnymi ułatwieniami dostępu są private
.
Dziedziczenie
Klasy (ale nie struktury) obsługują koncepcję dziedziczenia. Klasa, która pochodzi z innej klasy, nazywanej klasą bazową, automatycznie zawiera wszystkie publiczne, chronione i wewnętrzne elementy członkowskie klasy bazowej, z wyjątkiem konstruktorów i finalizatorów.
Klasy można zadeklarować jako abstrakcyjne, co oznacza, że co najmniej jedna z ich metod nie ma implementacji. Chociaż klasy abstrakcyjne nie mogą być tworzone bezpośrednio, mogą służyć jako klasy bazowe dla innych klas, które zapewniają brakującą implementację. Klasy można również zadeklarować jako zapieczętowane , aby zapobiec dziedziczeniu innych klas z nich.
Aby uzyskać więcej informacji, zobacz Dziedziczenie i polimorfizm.
Interfejsy
Klasy, struktury i rekordy mogą implementować wiele interfejsów. Implementacja z interfejsu oznacza, że typ implementuje wszystkie metody zdefiniowane w interfejsie. Aby uzyskać więcej informacji, zobacz Interfejsy.
Typy ogólne
Klasy, struktury i rekordy można zdefiniować przy użyciu co najmniej jednego parametru typu. Kod klienta dostarcza typ podczas tworzenia wystąpienia typu. Na przykład klasa List<T> w przestrzeni nazw System.Collections.Generic jest definiowana przy użyciu jednego parametru typu. Kod klienta tworzy wystąpienie obiektu List<string>
lub List<int>
w celu określenia typu, który zawiera lista. Aby uzyskać więcej informacji, zobacz Generyki.
Typy statyczne
Klasy (ale nie struktury lub rekordy) można zadeklarować jako static
. Klasa statyczna zawiera tylko statyczne składowe i nie można zainicjować jej instancji za pomocą słowa kluczowego new
. Jedna kopia klasy jest ładowana do pamięci podczas ładowania programu, a jej składowe są dostępne za pośrednictwem nazwy klasy. Klasy, struktury i rekordy mogą zawierać statyczne elementy członkowskie. Aby uzyskać więcej informacji, zobacz Statyczne klasy i statyczne składowe klas.
Zagnieżdżone typy
Klasę, strukturę lub rekord można zagnieździć w innej klasie, strukturze lub rekordzie. Aby uzyskać więcej informacji, zobacz Typy zagnieżdżone.
Typy częściowe
Część klasy, struktury lub metody można zdefiniować w jednym pliku kodu, a drugą część w osobnym pliku kodu. Aby uzyskać więcej informacji, zobacz Klasy częściowe i metody.
Inicjatory obiektów
Można zainicjować i utworzyć wystąpienia obiektów klas lub struktur oraz kolekcji obiektów, przypisując wartości do ich właściwości. Aby uzyskać więcej informacji, zobacz How to initialize objects by using an object initializer (Jak zainicjować obiekty przy użyciu inicjatora obiektów).
Typy anonimowe
W sytuacjach, gdy nie jest to wygodne lub konieczne do utworzenia nazwanej klasy używasz typów anonimowych. Nazwane składowe danych definiują typy anonimowe. Aby uzyskać więcej informacji, zobacz Typy anonimowe.
Członkowie rozszerzenia
Klasę można "rozszerzyć" bez tworzenia klasy pochodnej, tworząc oddzielny typ. Ten typ zawiera metody, które mogą być wywoływane tak, jakby należały do oryginalnego typu. Aby uzyskać więcej informacji, zobacz Metody rozszerzenia.
Jawnie wpisana zmienna lokalna
W metodzie klasy lub struktury można użyć niejawnego typowania, aby poinstruować kompilator do określenia typu zmiennej w czasie kompilacji. Aby uzyskać więcej informacji, zobacz var (odwołanie w C#).
Rekordy
Modyfikator record
można dodać do klasy lub struktury. Rekordy to typy z wbudowanym zachowaniem równości opartej na wartościach. Rekord ( record class
lub record struct
) udostępnia następujące funkcje:
- Zwięzła składnia tworzenia typu odwołania z niezmiennymi właściwościami.
- Równość wartości. Dwie zmienne typu rekordu są równe, jeśli mają ten sam typ, a jeśli dla każdego pola wartości w obu rekordach są równe. Klasy używają równości odwołań: dwie zmienne typu klasy są równe, jeśli odwołują się do tego samego obiektu.
- Zwięzła składnia nieniszczącej mutacji.
Wyrażenie
with
umożliwia utworzenie nowego wystąpienia rekordu, które jest kopią istniejącego wystąpienia, ale z zmienionymi określonymi wartościami właściwości. - Wbudowane formatowanie wyświetlania.
Metoda
ToString
wyświetla nazwę typu rekordu oraz nazwy i wartości właściwości publicznych. - Obsługa hierarchii dziedziczenia w klasach rekordów. Klasy rekordów obsługują dziedziczenie. Struktury rekordów nie obsługują dziedziczenia.
Aby uzyskać więcej informacji, zobacz Rekordy.
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#.