Metody rozszerzenia C#

Metody rozszerzenia C#
Koncepcja metody rozszerzenia jest wykorzystywana do wstawienia nowych metod w klasie już obecnej w programie. Lub może pozwolić nam dodać niektóre funkcje rozszerzenia bez edytowania kodu źródłowego typu oryginalnego. Zapobiega to użyciu dziedzictwa i skomplikuje kod. Jak można uzyskać dostęp do tych metod, jeśli metody rozszerzenia są obecne w nowej klasie?

Odpowiedź na to zapytanie polega na użyciu parametru wiązania. Służą one do powiązania klasy z nowo utworzonymi funkcjami. Jest to pusta zmienna, która nie zawiera żadnej wartości; Po prostu działa jako proste słowo kluczowe. Jest zawsze zadeklarowany na pierwszym miejscu na liście parametrów. Jeśli jest napisane inne niż w początkowym miejscu, odpowiedni kompilator poda błąd. Słowo kluczowe użyte w celu wiązania jest „to”.

# Ta próbka S;

Wszystkie metody rozszerzenia są zawsze zadeklarowane jako statyczne, ale po wystąpieniu wiązania z klasą funkcje te stają się nietatyczne.

Przykład 1

Rozważ prosty program ostrogi C, w którym zdefiniowane są trzy funkcje. Wszystkie te funkcje zawierają prostą konsolę.Instrukcja WriteLine do wyświetlenia wiadomości na ekranach. Te metody to regularne funkcje, takie jak proste programy.

# Public void m1 ()

Teraz chcemy dodać rozszerzenia do tego istniejącego programu. Rozszerzenia odgrywają ważną rolę w dodawaniu nowych funkcji w klasie bez użycia dziedzictwa. Ponadto możemy po prostu dodać nową klasę bez edytowania poprzedniego. Dodamy dwie metody rozszerzenia do próbki klasy. Nowe funkcje zostaną zadeklarowane w nowej klasie statycznej i stanie się częścią istniejącej klasy próbki. Proces ten jest znany jako wiązanie. Więc tworzona jest nowa klasa statyczna. Ta klasa nie ma związku z istniejącą klasą, ponieważ nie jest dziedziczona po klasie abstrakcyjnej lub już istniejącej klasie.

W klasie deklarujemy dwie nowe funkcje statyczne. Funkcje te mają takie same instrukcje, które należy wyświetlić. Podczas gdy deklaracja funkcji statycznych, w parametrze, używamy słowa kluczowego „to” wraz z obiektem klasy przykładowej. „To” jest parametrem wiązania; nie zawiera żadnej wartości, ale jest używany tylko do wiązania nowo utworzonych metod statycznych z istniejącym w klasie już zdefiniowanej. Gdy chcemy powiązać metody z próbką klasy, klasa i obiekt są używane w argumentach w celu wiązania.

# Publiczne statyczne void M4 (ta próbka)

Podobnie druga funkcja przyjmie również to słowo kluczowe i obiekt klasy. Na liście parametrów zadeklarujemy parametry wiązania zawsze na początku.

Ta funkcja wyświetli oświadczenie przekazane do niej za pośrednictwem programu głównego. Zadeklarowana jest klasa głównego programu. W programie głównym utworzymy obiekt dla klasy próbki, ponieważ połączyliśmy nowe metody z klasą próbki, więc wszystkie te metody będą dostępne za pośrednictwem obiektu klasy próbki. Nie ma potrzeby tworzenia obiektu dla nowej klasy.

# Próbka s = nowa próbka ();

Obiekt klasy jest określany dynamicznie. Ten obiekt wywoła wszystkie funkcje obu zdefiniowanych klas.

# S.M1 ();

Wykonamy powyższy kod źródłowy w terminalu Ubuntu. W tym celu potrzebny będzie kompilator, więc używamy MCS i użyjemy mono do wykonania pliku wraz z rozszerzeniem .exe.

Plik $ MCS.Cs
$ plik mono.exe

Przykład 2

W tym przykładzie tworzona jest funkcja logiczna, aby porównać dwie wartości i zwrócić, czy pierwsza wartość jest większa niż pierwsza. To porównanie jest dokonywane w klasie rozszerzenia zadeklarowanej w metodzie rozszerzenia. Po ogłoszeniu bibliotek bezpośrednio zastosowaliśmy jedną klasę, w której zadeklarowana jest rozszerzona metoda.

W klasie podjęliśmy funkcję typu bool. Ta logika zwróci jedną wartość „prawdziwą” lub „fałsz” na raz. Jeśli pierwsza wartość jest większa niż „prawdziwa” zostanie wysłana; W przeciwnym razie odpowiedź będzie fałszywa. Ten parametr zawiera parametr „ten” do powiązania funkcji rozszerzonej ze zmiennymi, które do niej przesłaliśmy z programu głównego. Podczas gdy dwie zmienne typu danych liczb całkowitych są również zadeklarowane w celu przechowywania wartości. Porównanie tych dwóch liczb całkowitych zostanie dokonane, a wartość zostanie zwrócona.

W programie głównym podejmowana jest zmienna typu liczb całkowita i przypisana wartość.

# Bool z = stri.MyExtensionMethod (200);

Zmienna typu bool zostanie tutaj zadeklarowana, aby zaakceptować zwróconą wartość funkcji w wywołaniu funkcji. Obiekt Stri służy do wywołania funkcji. To przyjmie wartość w parametrze. Druga wartość jest wysyłana do niego przez obiekt podczas wywoływania funkcji.

Zapisz kod i wykonaj go; Zobaczysz, że pierwsza wartość była mniejsza niż druga, dlatego odpowiedź jest fałszywa.

Przykład 3

W tym przykładzie C Sharp zastosowaliśmy wbudowaną metodę łańcucha do obliczenia długości ciągu wejściowego przekazanej w kierunku funkcji programu głównego. Tworzona jest klasa statyczna. Słowo kluczowe statyczne pokazuje, że inna klasa nie może go odziedziczyć. W tej klasie statycznej zadeklarowana jest metoda statyczna. Ta metoda znajdzie całkowitą długość łańcucha. Więc parametr metody będzie zawierać zmienną typu ciągów, aby zaakceptować ciąg wejściowy.

Metodę długości jest dostępna za pośrednictwem obiektu łańcucha. Teraz zadeklaruj główną funkcję. Przypisz wartość ciągu do typu danych ciągów.

# Int z = stri.extensionMethodName ();

To wywołanie funkcji cofnie długość i przechowuje ją w zmiennej typu liczb całkowitych. Ta długość zostanie wyświetlona za pomocą tej zmiennej za pomocą metody WriteLine ().

Skompiluj kod i wykonaj go. Zobaczysz, że w programie użyto ciąg 10 znaków.

Wniosek

Metoda rozszerzenia w C Sharp służy do dodania dodatkowej funkcjonalności do programu bez modyfikowania istniejącego kodu po napisaniu. Można to zrobić za pomocą dodatkowej klasy z rozszerzonymi metodami. Jednak metody te są częścią innej klasy, ale można je połączyć i uzyskać z obiektu już utworzonej klasy. Zastosowaliśmy kilka podstawowych przykładów, które wyjaśniły tworzenie i działanie rozszerzonych metod. Słowo kluczowe „to” odgrywa ważną rolę w wiązaniu metod rozszerzenia z klasą. Używamy tego słowa kluczowego w parametrze funkcji rozszerzonej.