Udostępnij za pośrednictwem


Omówienie technik zorientowanych na obiekty w języku C#

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#.