Klasy i struktury (Przewodnik programowania w języku C#)

Klasy i struktury są dwoma podstawowymi konstrukcjami wspólnego systemu typu w.NET Framework.Każdy jest zasadniczo strukturą danych, która hermetyzuje zestaw danych i zachowania, które są ze sobą jako jednostka logiczna.Dane i zachowania są członkami klasy lub struktury i obejmują one metody, właściwości i zdarzeń itp. wymienione w dalszej części tego tematu.

Deklaracja klasy lub struktury jest podobna do planu, który jest używany do utworzenia wystąpienia lub obiektów w czasie wykonywania.Po zdefiniowaniu klasy lub struktury o nazwie Person, Person jest nazwą typu.Jeśli zadeklarujesz i zainicjalizujesz zmienną p typu Person, mówi się, że p jest obiektem lub wystąpieniem Person.Wiele wystąpień tego samego typu Person może zostać utworzonych, a każde wystąpienie może mieć różne wartości we właściwościach i polach.

Klasa jest typem odwołania.Po utworzeniu obiektu klasy, zmienna, do której przypisany jest obiekt zawiera tylko odwołanie to tej pamięci.Kiedy odwołanie obiektu jest przypisane do nowej zmiennej, nowa zmienna odwołuje się do oryginalnego obiektu.Zmiany wprowadzone za pomocą jednej zmiennej są odzwierciedlane w innych zmiennych, ponieważ oba odnoszą się do tych samych danych.

Struktura jest typem wartości.Po utworzeniu struktury, zmienna do której jest przypisana struktura zawiera rzeczywiste dane struktury.Kiedy struktura jest przypisywana nowej zmiennej, jest kopiowana.Nowa zmienna i pierwotna zmienna zatem zawierają dwie oddzielne kopie tych samych danych.Zmiany wprowadzone w jednym egzemplarzu nie wpływają na drugi egzemplarz.

Ogólnie rzecz biorąc, klasy są używane do modelowania bardziej złożonych zachowań lub dane, które mają być modyfikowane po utworzeniu obiektu klasy są tworzone.Struktury najlepiej sprawdzają się w małych strukturach danych, które zawierają głównie dane, które nie są przeznaczone do modyfikacji po utworzeniu struktury.

Aby uzyskać więcej informacji, zobacz Klasy (Przewodnik programowania w języku C#), Obiekty (Przewodnik programowania w języku C#), i Struktury (Przewodnik programowania w języku C#).

Przykład

W poniższym przykładzie MyCustomClass jest zdefiniowana z trzema elementami członkowskimi na najwyższym poziomie przestrzeni nazw ProgrammingGuide.Wystąpienie (obiekt) MyCustomClass jest tworzony w Main metoda w Program klasy i metody obiektu i właściwości są dostępne przy użyciu notacji z kropką.

namespace ProgrammingGuide
    {
        // Class definition. 
        public class MyCustomClass
        {
            // Class members: 
            // Property. 
            public int Number { get; set; }

            // Method. 
            public int Multiply(int num)
            {
                return num * Number;
            }

            // Instance Constructor. 
            public MyCustomClass()
            {
                Number = 0;
            }
        }
        // Another class definition. This one contains 
        // the Main method, the entry point for the program. 
        class Program
        {
            static void Main(string[] args)
            {
                // Create an object of type MyCustomClass.
                MyCustomClass myClass = new MyCustomClass();

                // Set the value of a public property.
                myClass.Number = 27;

                // Call a public method. 
                int result = myClass.Multiply(4);
            }
        }
    }

Hermetyzacja

Hermetyzacja jest czasem nazywaae pierwszym filarem lub zasadą programowania zorientowanego na obiekt.Zgodnie z zasadą hermetyzacji, klasa lub struktura może określić, jak każdy z jej członków jest dostępny do kodu poza klasą lub strukturą.Metody i zmienne, które nie są przeznaczone do użycia z poza klasy lub zestawu mogą zostać ukryte, aby ograniczyć możliwość wystąpienia błędów kodowania lub złośliwego oprogramowania.

Aby uzyskać więcej informacji na temat klas, zobacz Klasy (Przewodnik programowania w języku C#) i Obiekty (Przewodnik programowania w języku C#).

Elementy członkowskie

Wszystkie metody, pola, stałe, właściwości i zdarzenia muszą być zadeklarowana w ramach danego typu; są to tak zwane członki tego typu.W języku programowania C# w przeciwieństwie do innych języków nie ma żadnych zmiennych globalnych lub metod.Nawet punktu wejścia programu Main metody, musi być zadeklarowany w klasie lub strukturze.Poniższa lista zawiera wszystkie różne rodzaje członków, które mogą zostać zadeklarowane w klasie lub strukturze.

Dostępność

Niektóre metody i właściwości mają być nazywane lub dostępne na podstawie kodu z poza swojej klasy lub struktury, znanego jako kod klienta.Inne metody i właściwości mogą być tylko do użytku w samej klasie lub strukturze.Ważne jest, aby ograniczyć dostępność kodu , tak aby tylko kod zamierzonego klienta mógł go osiągnąć.Poziom dostępności dla kodu klienta typów i ich członków określa się za pomocą modyfikatorów dostępu publiczny, chroniony, wewnętrzny, protected internal oraz prywatny.Wartość domyślna dostępu private.Aby uzyskać więcej informacji, zobacz Modyfikatory dostępu (Przewodnik programowania w języku C#).

Dziedziczenie

Klasy (ale nie struktury) obsługują dziedziczenia.Klasa, która wynika z innej klasy ( klasy bazowej) automatycznie zawiera wszystkicich publicznych, chronionych i wewnętrznych członków klasy podstawowej, z wyjątkiem jego konstruktorów i dekonstruktorów.Aby uzyskać więcej informacji, zobacz Dziedziczenie (Przewodnik programowania w języku C#) i Polimorfizm (Przewodnik programowania w języku C#).

Klasy mogą być uznana jako abstrakcyjne, co oznacza, że jedna lub więcej z ich metod nie mają implementacji.Chociaż nie można bezpośrednio utworzyć wystąpienia klasy abstrakcyjnej, mogą one służyć jako klay bazowe dla innych klas, którym brakuje implementacji.Klasy mogą być także zadeklarowane jako zamknięte , aby zapobiec dziedziczenu innych klas z nich.Aby uzyskać więcej informacji, zobacz Klasy abstrakcyjne i zapieczętowane oraz członkowie klas (Przewodnik programowania w języku C#).

Interfejsy

Klasy i struktury mogą odziedziczyć wiele interfejsów.Dziedziczenie od interfejsu oznacza, że typ implementuje wszystkie metody zdefiniowane w interfejsie.Aby uzyskać więcej informacji, zobacz Interfejsy (Przewodnik programowania w języku C#).

Typ ogólny

Klasy i struktury można zdefiniować przy pomocy jednego lub więcej parametrów typu.Kod klienta dostarcza typu podczas tworzenia wystąpienia tego typu.Na przykład klasa List w przestrzeni nazw System.Collections.Generic jest zdefiniowana za pomocą jednego typu parametru.Kod klienta tworzy instancję List<string> lub List<int> do określenia typu, który będzie przechowywać listę.Aby uzyskać więcej informacji, zobacz Typy ogólne (Przewodnik programowania w języku C#).

Typy statyczne

Klasy (ale nie struktury) mogą być deklarowane jako statyczne.Klasa statyczaj może zawierać tylko elementy statyczne i nie można utworzyć wystąpienia z nowego słowa kluczowego.Jedna kopia klasy jest ładowana do pamięci podczas wczytywania programu, a jej elementy członkowskie są dostępne za pośrednictwem nazwy klasy.Zarówno klasy jak i struktury mogą zawierać elementy statyczne.Aby uzyskać więcej informacji, zobacz Klasy statyczne i statyczni członkowie klas (Przewodnik programowania w języku C#).

Zagnieżdżone typy

Klasa lub struktura może być zagnieżdżona w innej klasie lub strukturze.Aby uzyskać więcej informacji, zobacz Typy zagnieżdżone.

Typy częściowe

Możesz zdefiniować część klasy, struktury lub metody w jednym pliku kodu i drugą część w osobnym pliku kodu.Aby uzyskać więcej informacji, zobacz Klasy częściowe i metody.

Inicjatory obiektów

Nie możesz utworzyć wystąpienia i zainicjalizować klasy lub obiektów struct i kolekcji obiektów, bez jawnego wywołania ich konstruktora.Aby uzyskać więcej informacji, zobacz Inicjatory obiektów i kolekcji (Przewodnik programowania w języku C#).

Typy anonimowe

W sytuacjach, gdy nie jest to wygodne lub niezbędne do utworzenia nazwanej klasy, na przykład podczas wypełniania listy strukturami danych tak, nie trzeba się powtarzać lub przechodzić do innej metody, należy użyć typów anonimowych.Aby uzyskać więcej informacji, zobacz Typy anonimowe (Przewodnik programowania w języku C#).

Metody rozszerzające

Możesz „rozszerzyć klasę” nie tworząc klasy pochodnej poprzez utworzenie oddzielnego typu, którego metody mogą być wywołane, tak jakby należały do oryginalnego typu.Aby uzyskać więcej informacji, zobacz Metody rozszerzeń (Przewodnik programowania w języku C#).

Jawnie wpisana zmienna lokalna

Wewnątrz klasy lub metody strukturalnej, możesz użyć niejawnego wpisywania, aby dać kompilatorowi instrukcje odnośnie do określenia poprawnego typu w czasie kompilacji.Aby uzyskać więcej informacji, zobacz Niejawnie wpisane zmienne lokalne (Przewodnik programowania w języku C#).

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ż

Koncepcje

Przewodnik programowania w języku C#