Ćwiczenie — wywoływanie metod klasy .NET
- {liczbaMinut} minut
Bez względu na to, czy udało Ci się to zrealizować, czy nie, od czasu pierwszej aplikacji "Hello, World!" wywołujesz metody języka C#. Ta aplikacja używa WriteLine() metody Console klasy do wyświetlania komunikatu "Hello, World!".
Jednak nie wszystkie klasy i metody są implementowane w taki sam sposób. W tej lekcji omówiono niektóre z najbardziej typowych wariantów, które należy zrozumieć podczas korzystania z metod z biblioteki klas platformy .NET. A co ważniejsze, dowiesz się, jak znaleźć i wykorzystać dokumentację, aby lepiej zrozumieć dalsze informacje dotyczące każdej metody.
Jak wywoływać metody w bibliotece klas platformy .NET
Z poprzednich doświadczeń z pracy z metodą Console.WriteLine() powinny być już znane podstawowe informacje:
- Zacznij od wpisania nazwy klasy. W takim przypadku nazwa klasy to
Console. - Dodaj operator dostępu do elementu członkowskiego,
.symbol . - Dodaj nazwę metody. W tym przypadku nazwa metody to
WriteLine. - Dodaj operator wywołania metody, który jest zestawem nawiasów
(). - Na koniec określ argumenty, które są przekazywane do metody, jeśli istnieją, między nawiasami operatora wywołania metody. W takim przypadku należy określić tekst, który ma być zapisywany w
Console.WriteLine()konsoli (na przykład"Hello World!").
Opcjonalnie, w zależności od tego, jak deweloperzy zaprojektowali i zaimplementowali daną metodę, może być również konieczne:
- Przekaż dodatkowe wartości jako parametry wejściowe.
- Zaakceptuj wartość zwracaną.
W następnej lekcji dowiesz się, jak przekazać wartości wejściowe do metody i jak można użyć metody w celu zwrócenia wartości do procedury wywołującej.
Chociaż niektóre metody mogą być wywoływane w taki sam sposób, jak w przypadku wywołania Console.WriteLine()metody , istnieją inne metody w bibliotece klas platformy .NET, które wymagają innego podejścia.
Przygotowywanie środowiska kodowania
Ten moduł zawiera działania programistyczne, które przeprowadzą Cię przez proces tworzenia i uruchamiania przykładowego kodu. Zachęcamy do wykonania tych działań przy użyciu programu Visual Studio Code jako środowiska programistycznego. Korzystanie z programu Visual Studio Code dla tych działań pomoże Ci lepiej pisać i uruchamiać kod w środowisku deweloperów używanym przez specjalistów na całym świecie.
Otwórz program Visual Studio Code.
Aby otworzyć program Visual Studio Code, możesz użyć menu Start systemu Windows (lub równoważnego zasobu dla innego systemu operacyjnego).
W menu Plik programu Visual Studio Code wybierz pozycję Otwórz folder.
W oknie dialogowym Otwórz folder przejdź do folderu Pulpit systemu Windows.
Jeśli masz inną lokalizację folderu, w której są utrzymywane projekty kodu, możesz zamiast tego użyć tej lokalizacji folderu. Na potrzeby tego szkolenia ważne jest, aby mieć lokalizację, która jest łatwa do zlokalizowania i zapamiętania.
W oknie dialogowym Otwieranie folderu wybierz pozycję Wybierz folder.
Jeśli zostanie wyświetlone okno dialogowe zabezpieczeń z pytaniem, czy ufasz autorom, wybierz pozycję Tak.
W menu Terminal programu Visual Studio Code wybierz pozycję Nowy terminal.
Zwróć uwagę, że wiersz polecenia w panelu Terminal wyświetla ścieżkę folderu dla bieżącego folderu. Przykład:
C:\Users\someuser\Desktop>Uwaga / Notatka
Jeśli pracujesz na własnym komputerze, a nie w piaskownicy lub w środowisku hostowanym i ukończono inne moduły Microsoft Learn w tej serii języka C#, być może utworzono już folder projektu dla przykładów kodu. Jeśli tak jest, możesz pominąć następny krok, który służy do tworzenia aplikacji konsolowej w folderze TestProject.
W wierszu polecenia terminalu, aby utworzyć nową aplikację konsolową w określonym folderze, wprowadź następujący monit:
dotnet new console -o ./CsharpProjects/TestProjectTo polecenie interfejsu wiersza polecenia platformy .NET używa szablonu programu .NET do utworzenia nowego projektu aplikacji konsolowej języka C# w określonej lokalizacji folderu. Polecenie tworzy foldery CsharpProjects i TestProject i używa elementu TestProject jako nazwy
.csprojpliku.Jeśli zostanie wyświetlony komunikat informujący o tym, że pliki już istnieją, przejdź do następnych kroków. Użyjesz ponownie istniejących plików projektu.
W widoku EKSPLORATOR rozwiń folder CsharpProjects .
Powinien zostać wyświetlony folder TestProject i dwa pliki, plik programu C# o nazwie Program.cs i plik projektu C# o nazwie TestProject.csproj.
W menu Plik programu Visual Studio Code wybierz pozycję Otwórz folder.
W oknie dialogowym Otwieranie folderu wybierz folder CsharpProjects , a następnie wybierz pozycję Wybierz folder.
W widoku EKSPLORATOR rozwiń folder TestProject, a następnie wybierz pozycję Program.cs.
Usuń istniejące wiersze kodu.
Ten projekt konsoli języka C# będzie używany do tworzenia, kompilowania i uruchamiania przykładów kodu w tym module.
Zamknij panel Terminal.
Wywoływanie różnych rodzajów metod w bibliotece klas platformy .NET
W edytorze programu Visual Studio Code, aby utworzyć przykładowy kod, który implementuje metody
System.Randomklas iSystem.Console, wprowadź następujący kod:Random dice = new Random(); int roll = dice.Next(1, 7); Console.WriteLine(roll);Ten kod symuluje rzut kostką przy użyciu
Random.Next()metody w celu wygenerowania liczby orazConsole.WriteLine()metody wyświetlania wartości.Uwaga / Notatka
W dalszej części tej lekcji zapoznasz się ze szczegółowym kodem.
W menu Plik programu Visual Studio Code kliknij przycisk Zapisz.
W widoku EKSPLORATOR, aby otworzyć terminal w lokalizacji folderu TestProject, kliknij prawym przyciskiem myszy pozycję TestProject, a następnie wybierz polecenie Otwórz w zintegrowanym terminalu.
Zwróć uwagę, że panel Terminal zawiera wiersz polecenia, który wyświetla ścieżkę folderu. Przykład:
C:\Users\someuser\Desktop\CsharpProjects\TestProject>Gdy używasz terminalu do uruchamiania poleceń interfejsu wiersza polecenia platformy .NET, polecenia są uruchamiane z wyświetlonej lokalizacji folderu. Upewnij się, że folder kodu jest zgodny ze ścieżką folderu wyświetlaną w wierszu polecenia przed skompilowanie lub uruchomieniem kodu.
W wierszu polecenia terminalu, aby uruchomić kod, wpisz dotnet run , a następnie naciśnij Enter.
Zwróć uwagę, że liczba z zakresu od 1 do 6 jest wyświetlana w danych wyjściowych konsoli (liczba kropek na kostkach). Jeśli uruchomisz kod wystarczająco dużo razy, zobaczysz każdą z wyświetlanych liczb 1–6.
Pośmiń minutę, aby sprawdzić składnię używaną do uzyskiwania
Next()dostępu do metod iWriteLine().Zwróć uwagę, że do uzyskiwania dostępu do metod używa się różnych technik.
Random dice = new Random(); int roll = dice.Next(1, 7); Console.WriteLine(roll);W trzecim wierszu kodu dołącz odwołanie do
Consoleklasy i wywołaj metodęConsole.WriteLine()bezpośrednio. Jednak do wywoływaniaRandom.Next()metody należy użyć innej techniki. Powodem, dla którego używasz dwóch różnych technik, jest to, że niektóre metody są "stanowe", a inne są "bezstanowe". W następnej sekcji zapoznasz się z różnicą między metodami stanowymi i bezstanowymi.
Porównanie metod stanowych i bezstanowych
W projektach tworzenia oprogramowania termin stan jest używany do opisywania stanu środowiska wykonawczego w określonym momencie w czasie. Ponieważ kod jest wykonywany wiersz po wierszu, wartości są przechowywane w zmiennych. W dowolnym momencie podczas wykonywania bieżący stan aplikacji jest kolekcją wszystkich wartości przechowywanych w pamięci.
Prawidłowe działanie niektórych metod nie zależy od bieżącego stanu aplikacji. Mówiąc inaczej, metody bezstanowe są implementowane, dzięki czemu mogą funkcjonować bez odwoływania się do żadnych wartości przechowywanych już w pamięci ani ich zmieniania. Metody bezstanowe są również nazywane metodami statycznymi.
Na przykład metoda Console.WriteLine() nie jest zależna od żadnych wartości przechowywanych w pamięci. Wykonuje ona swoją funkcję i kończy działanie, nie wpływając w żaden sposób na stan aplikacji.
Natomiast inne metody będą działać prawidłowo tylko po uzyskaniu dostępu do stanu aplikacji. Innymi słowy, metody stanowe są tworzone w taki sposób, aby polegały na wartościach przechowywanych w pamięci przez poprzednie wiersze kodu, które zostały już wykonane. Mogą również modyfikować stan aplikacji przez zaktualizowanie wartości lub przechowywanie nowych wartości w pamięci. Są one również nazywane metodami wystąpień.
Metody stanowe (wystąpień) śledzą stan w polach, które są zmiennymi zdefiniowanymi w klasie. Każde nowe wystąpienie klasy otrzymuje własną kopię pól, w których będzie przechowywany stan.
Pojedyncza klasa może obsługiwać zarówno metody stanowe, jak i bezstanowe. Jednak jeśli chcesz wywoływać metody stanowe, musisz najpierw utworzyć wystąpienie klasy, aby metoda mogła uzyskać dostęp do stanu.
Tworzenie wystąpienia klasy
Wystąpienie klasy nazywane jest obiektem. Aby utworzyć nowe wystąpienie klasy, należy użyć operatora new. Rozważmy następujący wiersz kodu, który tworzy nowe wystąpienie klasy Random w celu utworzenia nowego obiektu o nazwie dice:
Random dice = new Random();
Operator new wykonuje kilka ważnych czynności:
- Najpierw żąda w pamięci komputera adresu wystarczająco dużego, aby można było przechowywać nowy obiekt na podstawie klasy
Random. - Tworzy nowy obiekt i zapisuje go pod adresem pamięci.
- Zwraca adres pamięci, aby można go było zapisać w
diceobiekcie.
Od tego momentu, gdy dice obiekt jest przywoływalny w kodzie, środowisko uruchomieniowe platformy .NET wykonuje wyszukiwanie za kulisami, aby dać iluzję, że pracujesz bezpośrednio z samym obiektem.
Kod używa obiektu, dice takiego jak zmienna, która przechowuje stan Random klasy. Podczas wywoływania Next() metody w dice obiekcie metoda używa stanu przechowywanego dice w obiekcie w celu wygenerowania liczby losowej.
Najnowsza wersja środowiska uruchomieniowego platformy .NET umożliwia utworzenie wystąpienia obiektu bez konieczności powtarzania nazwy typu (wywołania konstruktora typu docelowego). Na przykład następujący kod utworzy nowe wystąpienie Random klasy:
Random dice = new();
Celem jest uproszczenie czytelności kodu. Nawiasy są zawsze używane podczas pisania wyrażenia typu new docelowego.
Dlaczego metoda Next() jest metodą stanową?
Być może zastanawiasz się, dlaczego metoda Next() została zaimplementowana jako metoda stanowa? Czy projektanci biblioteki klas platformy .NET nie mogą znaleźć sposobu generowania liczby losowej bez wymagania stanu? I co dokładnie jest przechowywane lub przywoływane przez metodę Next()?
Te pytania są uzasadnione. Na poziomie ogólnym komputery dobrze wykonują określone instrukcje w celu utworzenia wiarygodnego i powtarzalnego wyniku. Aby stworzyć iluzję losowości, deweloperzy metody Next() zdecydowali się na przechwytywanie daty i godziny do części milisekundy i używanie jej do wypełniania algorytmu, który za każdym razem generuje inną liczbę. Chociaż nie jest to całkowicie losowe, wystarcza w przypadku większości aplikacji. Stan przechwycony i utrzymywany przez okres istnienia dice obiektu jest wartością inicjającą. Każde kolejne wywołanie metody Next() polega na ponownym uruchomieniu algorytmu, ale zapewnia, że inicjator zmieni się tak, aby taka sama wartość nie była (koniecznie) zwracana.
Aby jednak użyć Random.Next() metody, nie musisz rozumieć , jak to działa. Ważne jest, aby wiedzieć, że niektóre metody wymagają utworzenia wystąpienia klasy przed ich wywołaniem, podczas gdy inne nie.
Jak można określić, czy należy utworzyć wystąpienie klasy przed wywołaniem jej metod?
Jednym z podejść do określania, czy metoda jest stanowa, czy bezstanowa, jest zapoznanie się z dokumentacją. Dokumentacja zawiera przykłady pokazujące, czy metoda musi być wywoływana z wystąpienia obiektu, czy bezpośrednio z klasy.
Uwaga / Notatka
Aby znaleźć przykłady kodu, może być konieczne przewinięcie w dół na stronie dokumentacji.
Alternatywą dla wyszukiwania w dokumentacji produktu jest próba uzyskania dostępu do metody bezpośrednio z samej klasy. Jeśli to działa, wiesz, że jest to metoda bezstanowa. Najgorsze, co może się zdarzyć, to błąd kompilacji.
Spróbuj uzyskać bezpośredni dostęp do Random.Next() metody i zobaczyć, co się stanie.
Wprowadź następujący wiersz kodu w edytorze programu Visual Studio Code:
int result = Random.Next();Wiesz już, że
Next()jest to metoda stanowa, jednak w tym przykładzie pokazano, jak edytor programu Visual Studio Code reaguje podczas próby nieprawidłowego uzyskania dostępu do metody.Zwróć uwagę, że w obszarze
Random.Nextpojawi się czerwona linia zquiggly wskazująca, że wystąpił błąd kompilacji.Jeśli metoda, której chcesz użyć, jest bezstanowa, zostanie wyświetlona czerwona linia z falochłoną.
Umieść wskaźnik myszy na czerwonej linii falista.
Powinno zostać wyświetlone okno podręczne z następującym komunikatem:
(1,14): error CS0120: An object reference is required for the non-static field, method, or property 'Random.Next()'Jak pokazano w kodzie na początku lekcji, możesz naprawić ten błąd, tworząc wystąpienie
Randomklasy przed uzyskaniem dostępu doNext()metody. Przykład:Random dice = new Random(); int roll = dice.Next();W tym przypadku metoda jest wywoływana
Next()bez parametrów wejściowych.
Podsumowanie
- Aby wywoływać metody klasy w bibliotece klas platformy .NET, należy użyć formatu
ClassName.MethodName(), w którym symbol.jest operatorem dostępu do elementu członkowskiego umożliwiającym uzyskiwanie dostępu do metody zdefiniowanej w klasie, a symbole()są operatorami wywołania metody. - W przypadku wywoływania metody bezstanowej nie trzeba najpierw tworzyć nowego wystąpienia klasy.
- W przypadku wywoływania metody stanowej należy utworzyć wystąpienie klasy i uzyskać dostęp do metody w obrębie obiektu.
- Użyj operatora
newdo utworzenia nowego wystąpienia klasy. - Wystąpienie klasy nazywane jest obiektem.