Вправа – виклик методів класу .NET
- 12 хвилин
Незалежно від того, усвідомили ви це чи ні, ви телефонуєте методам C# з моменту першої програми "Привіт, світ!". Ця програма використовує WriteLine() метод Console класу, щоб відобразити повідомлення "Привіт, світ!".
Однак не всі класи і методи реалізуються так само. Ця одиниця містить деякі найпоширеніші варіанти, які потрібно зрозуміти, використовуючи методи з бібліотеки класу .NET. Що ще важливіше, ви дізнаєтеся, як знайти та використовувати документацію, щоб краще зрозуміти більше про кожен метод.
Способи виклику в бібліотеці класу .NET
З попереднього досвіду використання методу Console.WriteLine() ви вже повинні знати основні відомості:
- Спочатку введіть ім'я класу. У цьому випадку ім'я класу має назву
Console. - Додайте оператор доступу учасника
.– символ. - Додайте ім'я методу. У цьому випадку ім'я методу –
WriteLine. - Додайте оператор виклику методу , який є набором дужок
(). - Нарешті, укажіть аргументи, які передаються до методу(за наявності) між дужками оператора виклику методу. У цьому випадку потрібно вказати текст, який потрібно
Console.WriteLine()записати на консоль (наприклад,"Hello World!").
За потреби залежно від того, як розробники розробили та впровадили цей метод, вам також може знадобитися:
- Передайте додаткові значення як вхідні параметри.
- Прийміть повернуте значення.
У наступній одиниці ви дізнаєтеся, як передати вхідні значення методу та як метод можна використовувати, щоб повернути значення до процедури викликів.
Хоча деякі методи можна назвати так само, як і ви , Console.WriteLine()є й інші методи в бібліотеці класу .NET, які вимагають іншого підходу.
Підготовка середовища кодування
Цей модуль містить дії з кодування, які допоможуть вам побудувати та запустити зразок коду. Вам рекомендується виконати ці дії, використовуючи Visual Studio Code як середовище розробки. Використання коду Visual Studio для цих дій допоможе вам стати більш зручним написанням і виконанням коду в середовищі розробників, яке використовують професіонали по всьому світу.
Відкрийте Код Visual Studio.
Щоб відкрити код Visual Studio, можна скористатися меню "Пуск" Windows (або еквівалентним ресурсом для іншої ОС).
У меню Код Visual Studio Файл виберіть Відкрити папку.
У діалоговому вікні Відкрити папку перейдіть до папки "Робочий стіл Windows".
Якщо у вас є інше розташування папки, де зберігаються проекти коду, натомість можна використовувати це розташування папки. Для цього навчання важливо мати розташування, яке легко знайти та запам'ятати.
У діалоговому вікні Відкрити папку виберіть Вибрати папку.
Якщо з'явиться діалогове вікно безпеки з запитанням, чи довіряєте ви авторам, виберіть Так.
У меню коду Visual Studio Code виберіть Новий термінал.
Зверніть увагу, що в командному рядку на панелі терміналів відображається шлях до папки для поточної папки. Наприклад,
C:\Users\someuser\Desktop>Нотатка
Якщо ви працюєте на власному ПК, а не в ізольованому середовищі або в розміщеному середовищі, а завершили інші модулі Microsoft Learn у цій серії C# , можливо, ви вже створили папку проекту для зразків коду. У такому разі можна пропустити наступний крок, який використовується для створення консолі в папці TestProject.
У командному рядку термінала, щоб створити нову програму консолі в указаній папці, введіть такий запит:
dotnet new console -o ./CsharpProjects/TestProjectЦя команда .NET CLI використовує шаблон програми .NET для створення нового проекту програми консолі C# у вказаному розташуванні папки. Ця команда створює папки CsharpProjects і TestProject і використовує TestProject як ім'я
.csprojфайлу.Якщо відображається повідомлення про те, що файли вже існують, виконайте наступні кроки. Ви повторно використовуватимете наявні файли проекту.
У поданні EXPLORER розгорніть папку CsharpProjects .
Має відобразитися папка TestProject і два файли, файл програми C# з іменем Program.cs і файл проекту C# з іменем TestProject.csproj.
У меню Код Visual Studio Файл виберіть Відкрити папку.
У діалоговому вікні Відкрити папку виберіть папку CsharpProjects , а потім натисніть кнопку Вибрати папку.
У поданні EXPLORER розгорніть папку TestProject і виберіть Program.cs.
Видалення наявних рядків коду.
Ви використовуватимете цей проект консолі C# для створення, створення та виконання зразків коду під час цього модуля.
Закрийте панель терміналів.
Виклик різних методів у бібліотеці класу .NET
У редакторі коду Visual Studio, щоб створити зразок коду, який впроваджує методи
System.RandomтаSystem.Consoleкласи, введіть такий код:Random dice = new Random(); int roll = dice.Next(1, 7); Console.WriteLine(roll);Цей код імітує рулон кістки за допомогою методу
Random.Next()створення числа таConsole.WriteLine()методу відображення значення.Нотатка
Ви докладно розглянете код пізніше в цій одиниці.
У меню Файл коду Visual Studio натисніть кнопку Зберегти.
У поданні EXPLORER, щоб відкрити термінал у розташуванні папки TestProject, клацніть правою кнопкою миші елемент TestProject, а потім виберіть відкрити в інтегрованому терміналі.
Зверніть увагу, що панель терміналів містить командний рядок, у якому відображається шлях до папки. Наприклад,
C:\Users\someuser\Desktop\CsharpProjects\TestProject>Коли ви використовуєте термінал для запуску команд .NET CLI, команди виконуються з розташування папки, що відображається. Перш ніж створювати або запускати код, переконайтеся, що папка з кодом збігається зі шляхом папки, що відображається в командному рядку.
У командному рядку термінала, щоб запустити код, введіть dotnet виконати і натисніть клавішу Enter.
Зверніть увагу, що у виводі консолі відображається число від 1 до 6 (кількість точок на кістках). Якщо ви запустите код достатньо часу, ви побачите всі числа 1–6, що відображаються.
Перевірте синтаксис, який використовується для доступу до методів і
Next()зачекайте хвилинуWriteLine().Зверніть увагу, що для доступу до методів використовуються різні методи.
Random dice = new Random(); int roll = dice.Next(1, 7); Console.WriteLine(roll);У третьому рядку коду потрібно вказати посилання на
Consoleклас і напрямуConsole.WriteLine()викликати метод. Однак для викликуRandom.Next()методу використовується інший метод. Причина, чому ви використовуєте дві різні методи, полягає в тому, що деякі методи є "державними", а інші – без громадянства. У наступному розділі ви перевіряєте різницю між методами бездержавного стану та без громадянства.
Державні та бездержавні методи
У проектах розробки програмного забезпечення стан терміна використовується для опису стану середовища виконання в певний момент часу. Коли код виконує рядок за рядком, значення зберігаються в змінних. У будь-який момент під час виконання поточний стан програми – це колекція всіх значень, які зберігаються в пам'яті.
Деякі методи не використовують поточний стан програми, щоб працювати належним чином. Іншими словами, впроваджуються методи без громадянства , щоб вони могли працювати без посилання або змінення значень, які вже зберігаються в пам'яті. Методи без громадянства також називаються статичними методами.
Наприклад, Console.WriteLine() метод не залежить від значень, які зберігаються в пам'яті. Вона виконує свою функцію та завершує роботу, не впливаючи на стан програми будь-яким чином.
Інші методи, однак, повинні мати доступ до стану програми, щоб працювати належним чином. Іншими словами, державні методи вбудовано таким чином, що вони покладаються на значення, збережені в пам'яті за допомогою попередніх рядків коду, які вже виконано. Або вони змінюють стан програми, оновлюючи значення або зберігаючи нові значення в пам'яті. Їх також називають методами екземплярів.
Методи stateful (instance) відстежують свій стан у полях, які є змінними, визначеними в класі. Кожен новий екземпляр класу отримує власну копію полів, у яких потрібно зберігати стан.
Один клас може підтримувати як державні, так і бездержавні методи. Однак, коли потрібно викликати державні методи, спочатку потрібно створити екземпляр класу, щоб метод міг отримати доступ до стану.
Створення екземпляра класу
Екземпляр класу називається об'єктом. Щоб створити новий екземпляр класу, скористайтеся оператором new . Розглянемо такий рядок коду, який створює новий екземпляр Random класу для створення нового об'єкта під назвою dice:
Random dice = new Random();
Оператор new робить кілька важливих речей:
- Спочатку надсилає запит на адресу в пам'яті комп'ютера, достатньо велику, щоб зберегти новий об'єкт на
Randomоснові класу. - Він створює новий об'єкт і зберігає його за адресою пам'яті.
- Вона повертає адресу пам'яті, щоб її можна було зберегти в об'єкті
dice.
З цього моменту, коли dice на об'єкт посилається код, середовище виконання .NET виконує підстановку за лаштунками, щоб дати ілюзію, що ви працюєте безпосередньо з самим об'єктом.
У коді використовується dice об'єкт, як змінна, у якій зберігається Random стан класу. Коли ви викликаєте Next() метод на dice об'єкті, метод використовує стан, що зберігається в dice об'єкті, щоб створити випадкове число.
Остання версія середовища виконання .NET дає змогу створити екземпляр об'єкта, не повторюючи ім'я типу (виклик конструктора цільового типу). Наприклад, наведений нижче код створить Random новий екземпляр класу:
Random dice = new();
Це спрощує читання коду. Дужки завжди використовуються під час написання виразу, введеного цільовим new типом.
Чому метод Next() є державним?
Ви можете бути здивовані, Next() чому метод був реалізований як державний метод? Чи не вдалося розробникам бібліотеки класу .NET з'ясувати спосіб створити випадкове число, не вимагаючи стану? І що саме зберігається або посилається методом Next() ?
Це справедливі питання. На високому рівні комп'ютери добре виконують конкретні інструкції, щоб створити надійний і повторюваний результат. Щоб створити ілюзію випадковості, розробники методу Next() вирішили записати дату і час до частки мілісекунди і використовувати його, щоб зсіяти алгоритм, який щоразу виробляє різне число. Хоча це не зовсім випадково, цього достатньо для більшості програм. Стан, який записується та зберігається протягом терміну служби об'єкта, – це значення насіннєвого dice значення. Кожен наступний виклик методу Next() повторно виконує алгоритм, але гарантує, що насіння змінюється таким чином, щоб одне значення не було повернуто (обов'язково).
Однак, щоб скористатися методом Random.Next() , не потрібно розуміти , як він працює. Важливо знати, що деякі методи вимагають створення екземпляра класу, перш ніж називати їх, а інші ні.
Як визначити, чи потрібно створити екземпляр класу, перш ніж викликати його методи?
Один із способів визначення того, чи є метод державним або без громадянства, полягає в тому, щоб проконсультуватися в документації. Документація містить приклади, які показують, чи потрібно викликати метод із екземпляра об'єкта або безпосередньо з класу.
Нотатка
Щоб знайти приклади коду, може знадобитися прокрутити вниз на сторінці документації.
Як альтернативу пошуку за допомогою документації продукту, ви можете спробувати отримати доступ до методу безпосередньо з самого класу. Якщо це працює, ви знаєте, що це бездержавний метод. Найгірше, що може статися, це те, що ви отримаєте помилку компіляції.
Спробуйте отримати доступ безпосередньо до методу Random.Next() та дізнатися, що станеться.
Введіть такий рядок коду в редактор коду Visual Studio:
int result = Random.Next();Ви вже знаєте, що
Next()це державний метод, однак у цьому прикладі показано, як редактор коду Visual Studio реагує під час спроби отримати неправильний доступ до методу.Зверніть увагу, що червона хвиляста лінія відображається в розділі
Random.Next, що вказує на помилку компіляції.Якщо потрібний метод не відображається без громадянства, червона хвиляста лінія не з'явиться.
Наведіть вказівник миші на червону хвилясту лінію.
Має з'явитися спливаюче вікно з таким повідомленням:
(1,14): error CS0120: An object reference is required for the non-static field, method, or property 'Random.Next()'Як ви бачили в коді на початку одиниці, ви можете виправити цю помилку, створивши екземпляр
Randomкласу, перш ніж отримати доступ до методуNext(). Наприклад,Random dice = new Random(); int roll = dice.Next();У цьому випадку
Next()метод викликається без вхідних параметрів.
Коротко
- Щоб викликати методи класу в бібліотеці класу .NET, використовуйте формат
ClassName.MethodName(), де.символ є оператором доступу учасника для доступу до методу, визначеного для класу, а()символи – операторами виклику методу. - Під час виклику методу без громадянства спочатку не потрібно створювати новий екземпляр його класу.
- Під час виклику державного методу потрібно створити екземпляр класу та отримати доступ до методу на об'єкті.
-
newВикористовуйте оператор для створення нового екземпляра класу. - Екземпляр класу називається об'єктом.
Перевірте свої знання
Зворотний зв’язок
Чи була ця сторінка корисна?
Ні
Потрібна допомога із цією темою?
Хочете скористатися Ask Learn, щоб отримати пояснення чи інструкції із цієї теми?