c delegate tutorial how instantiate
W tym samouczku wyjaśniono, jak używać delegata C # za pomocą prostych przykładów kodu. Dowiesz się również o delegatach multiemisji w języku C #:
Co to są delegaci C #?
W C # delegaci są podobne do wskaźników dostępnych w C ++. Jest to w zasadzie zmienna typu referencyjnego, która zawiera odniesienie do innej metody.
Ponadto jego odniesienie nie może zostać zmienione w czasie wykonywania. Jest dostępny w klasie System.Delegate. Delegat służy do obsługi funkcji wywołania zwrotnego lub programu obsługi zdarzeń.
Jest podobny do wskaźnika do funkcji i może być zadeklarowany przy użyciu słowa kluczowego delegat, po którym następuje podpis funkcji.
=> Przeczytaj całą serię szkoleń C # tutaj
Deklaracja delegata określa również metodę, do której delegat może się odwoływać, tj. Może to być metoda referencyjna, która ma taki sam podpis jak delegat.
Czego się nauczysz:
Tworzenie wystąpienia delegata w C #
Po zadeklarowaniu delegata można go utworzyć za pomocą słowa kluczowego new, a następnie należy go skojarzyć z metodą. Podobnie jak metoda, wyrażenie musi przekazać argument.
Wywołanie delegata
Delegata można wywołać podobnie jak metodę.
Przykład:
class Program { public delegate void methodDelegate(); public static void Main(string[] args) { methodDelegate md = new methodDelegate(method); md.Invoke(); } public static void method() { Console.WriteLine('Delegate pointing to method'); } }
Wynik
Wynik powyższego programu będzie:
Deleguj wskazanie metody
Wyjaśnienie
najlepsze oprogramowanie do naprawy komputera dla systemu Windows 10
W powyższym programie stworzyliśmy obiekt delegata i wskazaliśmy mu metodę, którą musimy wywołać. Następnie użyliśmy metody invoke () do wywołania metody za pomocą „delegate”.
Dlaczego musimy używać delegata C #?
Mogliśmy wywołać metodę bezpośrednio z naszej głównej metody, ale dlaczego naprawdę musimy używać delegata?
Delegat w prostym języku oznacza przedstawiciela do komunikacji między dwiema grupami. Nawet w kontekście programowania pełni podobną rolę. Służy do wywołań zwrotnych.
Załóżmy, że mamy długotrwałą metodę i musimy stale sprawdzać jej postęp. W tym celu używamy oddzwaniania poprzez delegata. To pozwala nam śledzić długotrwałą metodę.
Na przykład:
public class Program { One on = new One(); public static void Main(string[] args) { One.generateNumbers(callDelegate); Console.ReadLine(); } public static void callDelegate(int j) { Console.WriteLine('The current random number is :' + j); } } public class One { public delegate void callingDelegate(int j); public static void generateNumbers(callingDelegate cd) { Random rn = new Random(); int i = 0; int j = 0; while (i <10) { j = rn.Next(9999); cd(j); i++; } } }
Wynik powyższego programu będzie:
Wynik
Obecna liczba losowa to: 1559
Obecna liczba losowa to: 6127
Obecna liczba losowa to: 6639
Obecna liczba losowa to: 3963
Obecna liczba losowa to: 4479
Obecna liczba losowa to: 6898
Obecna liczba losowa to: 1390
Bieżąca liczba losowa to: 6409
Obecna liczba losowa to: 2629
Obecna liczba losowa to: 5464
W powyższym programie użyliśmy delegata do uzyskania wywołania zwrotnego z metody „generationNumber”, która generuje losową liczbę całkowitą dla danej iteracji. Ta iteracja może być ogromna. W związku z tym delegat jest używany do uzyskania wywołania zwrotnego za każdym razem, gdy w metodzie generowana jest losowa liczba całkowita.
Co to jest delegat multiemisji w C #?
Pełnomocnik może wskazać kilka różnych metod. Delegat wskazujący na kilka różnych metod jest nazywany delegatem multiemisji. Znak „+” (operator) służy do dodawania funkcji do delegata, a znak „-” (operator) służy do usuwania wszelkich istniejących funkcji dołączonych do delegata.
Delegat multiemisji wywołuje wskazane funkcje i można łączyć tylko te same typy funkcji, aby utworzyć delegata multiemisji. Może to służyć do tworzenia listy metod, które muszą być wywoływane przez wywołanie pojedynczego delegata.
Rzućmy okiem na prosty program, aby to zrozumieć:
sql podstawowe pytania i odpowiedzi do rozmowy kwalifikacyjnej pdf
Program
public class Program { delegate void IntegerCounter(int n); public static void method_A(int a) { a = a + 5; Console.WriteLine('the value of first method {0}', a); } public static void method_B(int b) { b = b * 5; Console.WriteLine('the value of second method {0}', b); } public static void Main(string[] args) { //creating instance of the delegate IntegerCounter x; IntegerCounter y = new IntegerCounter(method_A); IntegerCounter z = new IntegerCounter(method_B); x = y; x += z; x(10); Console.ReadLine(); } }
Wynik
wartość pierwszej metody 5
wartość drugiej metody 50
W powyższym programie zadeklarowaliśmy delegata IntegerCounter. Następnie stworzyliśmy dwie różne metody, które wykonują określoną operację na wartości całkowitej. Następnie w metodzie głównej zainicjowaliśmy delegata dla obu zdefiniowanych metod.
Następnie najpierw użyliśmy obiektu delegata do wskazania pierwszej zainicjowanej metody delegata, a następnie użyliśmy znaku „+” do delegata multiemisji i wskazaliśmy inną metodę. Następnie, jeśli przekażemy parametr będący liczbą całkowitą, obie metody otrzymają ten sam parametr i zostaną wykonane.
Wniosek
Delegat jest wskaźnikiem do funkcji. Metoda, która będzie używać delegata, musi mieć ten sam parametr i zwracany typ.
Delegata można zadeklarować podobnie do funkcji i można go również wywołać podobnie. Delegat multiemisji ma miejsce, gdy używamy delegata do wskazywania wielu metod, a operator plus „+” jest używany do korzystania z multiemisji.
=> Zapoznaj się z całą serią samouczków szkoleniowych języka C # tutaj
rekomendowane lektury
- Debugowanie skryptów Selenium za pomocą dzienników (samouczek Log4j) - samouczek Selenium # 26
- Efektywne skrypty Selenium i scenariusze rozwiązywania problemów - samouczek Selenium nr 27
- Wdrożenie naszego pierwszego skryptu WebDriver - Selenium WebDriver Tutorial # 10
- WebDriver Cała konfiguracja i instalacja z Eclipse - samouczek Selenium # 9
- Wprowadzenie do Selenium WebDriver - samouczek Selenium # 8
- Tworzenie typów generycznych i zestawów testowych - samouczek Selenium # 22
- Jak obsługiwać wyjątki w skryptach SoapUI Groovy - samouczek SoapUI nr 11
- Jak zdalnie zaktualizować stan wykonania przypadku testowego TestLink za pomocą Selenium - samouczek nr 3