Szablony klas
Stronę tą wyświetlono już: 2377 razy
Wstęp
Szablony są niezwykle ważnym elementem programowania, umożliwiają one dynamiczne dostosowanie kodu klasy do naszych potrzeb, a to dynamiczne dostosowanie wykonywane jest w trakcie jego kompilacji. Umożliwiają one opisanie za pomocą jednego kodu klas, czy metod klas, które będą się różniły jedynie typem danych w nich zawartych.
Przykład implementacji szablonu klasy
Przykład implementacji klasy szablonowej:
- // ######################### SZABLON KLASY ########################
- class point<T> where T : struct/*, class, IComparable, IConvertible*/
- {
- protected T x;
- public T X
- {
- get { return x; }
- set { x = value; }
- }
- protected T y;
- public T Y
- {
- get { return y; }
- set { y = value; }
- }
- public point(T x, T y)
- {
- this.x = x;
- this.y = y;
- }
- public override string ToString()
- {
- return "point: x = " + x + "; y = " + y;
- }
- }
Jak widać w C# nie jest konieczne użycie słowa kluczowego template tak jak to miało miejsce w przypadku C++, wystarczy bowiem podać po słowie kluczowym class listę typów używanych w klasie, po czym możliwe jest jeszcze zdefiniowanie dodatkowych warunków, jakie dane typy muszą spełniać. W powyższym przykładzie zaznaczono, że T musi być typu wartościowego (czyli strukturą). można też wyszczególnić interfejsy, po których dana klasa musi dziedziczyć. I tutaj warto wyróżnić dwa typy interfejsów: IComparable i IConvertible. Jeżeli chcesz zaznaczyć, że dany typ musi wykorzystywać operatory porównania, to musisz do listy warunków dodać właśnie interfejs IComparable, natomiast gdy chcesz, aby dany typ obsługiwał metody związane z konwersją na typy proste, musisz dodać dziedziczenie po interfejsie IConvertible.
Można też wymusić, aby podany typ obsługiwał konstruktor bezparametrowy w następujący sposób:
- class point<T> where T: class, new(){
- ...
- }
Można też wymusić dziedziczenie jednego typu po drugim:
- class point<T, A> where T: A, new(){
- ...
- }

Tytuł:
Wzorce projektowe w .NET Core 3. Projektowanie zorientowane obiektowo z wykorzystaniem C# i F#
Autor:
Dmitri Nesteruk

Tytuł:
Jak pisać świetne gry 2D w Unity. Niezależne programowanie w języku C#
Autor:
Jared Halpern

Tytuł:
C# 9.0 w pigułce
Autor:
Joseph Albahari

Tytuł:
C# 9.0. Leksykon kieszonkowy
Autor:
Joseph Albahari, Ben Albahari

Tytuł:
C# 8.0. Kompletny przewodnik dla praktyków. Wydanie VII
Autor:
Mark Michaelis

Tytuł:
C# 8.0 w pigułce
Autor:
Joseph Albahari, Eric Johannsen

Tytuł:
Asynchroniczność i wielowątkowość w języku C#
Autor:
Grzegorz Lang

Tytuł:
C# 8.0. Programowanie. Tworzenie aplikacji Windows, internetowych oraz biurowych
Autor:
Ian Griffiths

Tytuł:
C# 8.0. Leksykon kieszonkowy
Autor:
Joseph Albahari, Ben Albahari

Tytuł:
Wzorce projektowe w .NET. Projektowanie zorientowane obiektowo z wykorzystaniem C# i F#
Autor:
Dmitri Nesteruk