Badanie zasad zachowania polimorficznego
Polimorfizm umożliwia traktowanie obiektów różnych typów jako obiektów wspólnego typu podstawowego. To zachowanie umożliwia pisanie kodu, który współpracuje z obiektami wielu typów bez znajomości określonego typu w czasie kompilacji.
Rozważmy na przykład klasę bazową Shape z klasami pochodnymi Circle i Rectangle. Możesz utworzyć listę obiektów Shape i dodać do niej wystąpienia Circle i Rectangle. Podczas iteracji na liście można wywołać metodę Draw dla każdego obiektu bez znajomości określonego typu obiektu. Ten proces jest przykładem zachowania polimorficznego w działaniu.
Podejścia do polimorfizmu w języku C#
Deweloperzy języka C# mogą implementować polimorfizm przy użyciu jednej z następujących metod:
Polimorfizm oparty na dziedziczeniu: dziedziczenie klas w języku C# umożliwia klasom pochodnym dziedziczenie składowych z klasy bazowej. Elementy członkowskie klasy bazowej można zastąpić w klasie pochodnej w celu zapewnienia określonych implementacji. Podczas tworzenia wystąpień klasy bazowej odwołujących się do typów klas pochodnych można uzyskać dostęp do składowych klasy pochodnej z obiektów klasy bazowej. Polimorfizm oparty na dziedziczeniu jest typowym sposobem implementowania polimorfizmu w języku C#.
Polimorfizm oparty na interfejsie: interfejs w języku C# definiuje kontrakt, który może implementować klasy. Gdy klasa implementuje interfejs, klasa otrzymuje zestaw właściwości i metod, które są wymagane do zaimplementowania. To wymaganie umożliwia zachowanie polimorficzne, w którym odwołanie interfejsu może kierować obiekty różnych klas do implementowania zestawu właściwości i metod. Polimorfizm oparty na interfejsie to inny typowy sposób implementowania polimorfizmu w języku C#.
Przeciążanie metody a zastępowanie metody
Przeciążenie metody i zastępowanie metody to dwie typowe techniki implementowania wywołań metod, które generują różne zachowania. Oto porównanie dwóch technik:
Przeciążenie metody: przeciążenie metody umożliwia zdefiniowanie wielu metod o tej samej nazwie, ale różnych parametrach w tej samej klasie. Wywoływana metoda jest określana w czasie kompilacji na podstawie podpisu metody. Przeciążenie metody jest często określane jako polimorfizm czasu kompilacji.
Zastępowanie metody: zastępowanie metody umożliwia klasy pochodnej zapewnienie konkretnej implementacji metody, która jest już zdefiniowana w swojej klasie bazowej. Wywoływana metoda jest określana w czasie wykonywania na podstawie rzeczywistego typu obiektu. Zastępowanie metody jest przykładem polimorfizmu środowiska uruchomieniowego.
To szkolenie koncentruje się na zastępowaniu metody, która jest kluczowym aspektem polimorfizmu w języku C#.
Zasady polimorfizmu w języku C#
Polimorfizm opiera się na następujących zasadach:
- Zastępowanie metody: zastępowanie metody umożliwia klasie pochodnej zapewnienie konkretnej implementacji metody, która jest już zdefiniowana w swojej klasie bazowej. Ta funkcja jest możliwa przez dziedziczenie i jest kluczowym aspektem polimorfizmu środowiska uruchomieniowego.
- Metody wirtualne i abstrakcyjne: słowo kluczowe wirtualne służy do deklarowania metod w klasie bazowej, które można zastąpić w klasach pochodnych. Słowo kluczowe abstrakcyjne jest używane do deklarowania metod, które muszą zostać zastąpione w klasach pochodnych.
- Odwołania do klas bazowych: Polimorfizm umożliwia odwołanie do klasy bazowej w celu wskazywania obiektów klas pochodnych. Ten mechanizm dziedziczenia umożliwia wywołanie zastąpionych metod w klasach pochodnych za pomocą odwołania do klasy bazowej.
- Polimorfizm oparty na interfejsie: Interfejsy definiują kontrakt, który klasy mogą implementować. Ten kontrakt umożliwia jednolite traktowanie różnych klas za pomocą wspólnego interfejsu, promowanie luźnego sprzężenia i elastyczności.
Zalety polimorfizmu
Ponowne użycie kodu: Polimorfizm promuje możliwość ponownego zastosowania kodu, umożliwiając pracę z różnymi typami obiektów w tym samym kodzie.
Elastyczność i łatwość konserwacji: Polimorfizm zwiększa elastyczność i łatwość konserwacji przez oddzielenie kodu, który używa obiektów z kodu definiującego obiekty.
Rozszerzalność: Polimorfizm ułatwia rozszerzanie systemu przez dodanie nowych klas implementujących ten sam interfejs lub dziedziczących z tej samej klasy bazowej.
Streszczenie
Polimorfizm to kluczowa koncepcja programowania obiektowego, która umożliwia elastyczność, możliwość ponownego zastosowania i łatwość konserwacji w kodzie. Zrozumienie zasad polimorfizmu i jego implementacji w języku C#pozwala tworzyć modułowe i rozszerzalne aplikacje, które są łatwiejsze do utrzymania i rozwoju w czasie.