Упражнение. Вызов методов класса .NET
- 12 мин
Вы поняли это или нет, вы вызывали методы C# с первого приложения Hello, World! Это приложение использует WriteLine() метод Console класса для отображения сообщения Hello, World!
Однако не все классы и методы реализуются так же. В этом уроке рассматриваются некоторые из наиболее распространенных вариантов, которые необходимо понять при использовании методов из библиотеки классов .NET. Кроме того, вы узнаете, как искать и использовать дополнительную информацию о методах в документации.
Вызов методов из библиотеки классов .NET
На примере метода Console.WriteLine() вы уже знакомы с основными принципами работы.
- Начните с ввода имени класса. В этом случае,
Console— это имя класса. - Добавьте символ
., оператор доступа к членам. - Добавьте имя метода. В этом случае имя метода равно
WriteLine. - Добавьте оператор вызова метода, который является набором круглых скобок
(). - Наконец, укажите аргументы, передаваемые методу, если есть, между скобками оператора вызова метода. В этом случае необходимо указать текст, который требуется
Console.WriteLine()записать в консоль (например,"Hello World!").
Опционально, в зависимости от того, как разработчики спроектировали и реализовали данный метод, вам также может понадобиться:
- Передайте дополнительные значения в качестве входных параметров.
- Примите возвращаемое значение.
В следующем уроке вы узнаете, как передать входные значения методу и как можно использовать метод для возврата значения в вызывающую подпрограмму.
Хотя некоторые методы можно вызывать так же, как вы вызвали Console.WriteLine(), в библиотеке классов .NET существуют другие методы, требующие другого подхода.
Подготовка среды программирования
Этот модуль включает действия по написанию кода, которые помогут вам в процессе создания и выполнения примера кода. Рекомендуется выполнить эти действия с помощью Visual Studio Code в качестве среды разработки. Использование Visual Studio Code для выполнения этих задач поможет вам стать более уверенным в написании и выполнении кода в среде разработки, которая используется профессионалами по всему миру.
Откройте Visual Studio Code.
Для открытия Visual Studio Code можно использовать меню Windows (или эквивалентный ресурс для другой ОС).
В меню Visual Studio Code "Файл" выберите "Открыть папку".
В диалоговом окне "Открыть папку " перейдите в папку "Рабочий стол 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 Code "Файл" выберите "Открыть папку".
В диалоговом окне "Открыть папку " выберите папку CsharpProjects и выберите "Выбрать папку".
В представлении EXPLORER разверните папку TestProject и выберите Program.cs.
Удалите существующие строки кода.
Вы будете использовать этот консольный проект C# для создания, сборки и запуска примеров кода во время этого модуля.
Закройте панель терминала.
Вызов различных типов методов в библиотеке классов .NET
В редакторе Visual Studio Code, чтобы создать пример кода, который реализует методы классов
System.RandomиSystem.Console, введите следующий код:Random dice = new Random(); int roll = dice.Next(1, 7); Console.WriteLine(roll);Этот код имитирует бросок кубика с помощью метода
Random.Next()для создания числа и методаConsole.WriteLine()для отображения значения.Замечание
Далее в этом уроке вы изучите код.
В меню Visual Studio Code "Файл" нажмите на "Сохранить".
В представлении EXPLORER откройте терминал в папке TestProject, щелкните правой кнопкой мыши TestProject и выберите "Открыть в интегрированном терминале".
Обратите внимание, что панель терминала содержит командную строку, отображающую путь к папке. Рассмотрим пример.
C:\Users\someuser\Desktop\CsharpProjects\TestProject>При использовании терминала для выполнения команд .NET CLI команды выполняются из отображаемого расположения папки. Убедитесь, что папка кода соответствует пути к папке, отображаемой в командной строке перед сборкой или запуском кода.
В командной строке терминала, чтобы запустить код, введите команду dotnet run и нажмите клавишу 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() не использует значения, которые хранятся в памяти. Он начинает и завершает работу, не оказывая никакого влияния на текущее состояние приложения.
Тем не менее, другие методы должны иметь доступ к состоянию приложения для корректной работы. Другими словами, методы с отслеживанием состояния создаются таким образом, чтобы они опирались на значения, хранящиеся в памяти предыдущими строками кода, которые уже были выполнены. Также они могут изменять состояние приложения, обновляя значения в памяти или сохраняя в ней новые значения. Такие методы также называются методами экземпляра.
Методы с состоянием (экземпляра) отслеживают своё состояние с помощью полей, которые являются переменными, определенными в классе. Каждый новый экземпляр такого класса получает собственную копию этих полей, в которых хранит сведения о состоянии.
Один класс может поддерживать методы как с состоянием, так и без состояния. Тем не менее для вызова методов с отслеживанием состояния сначала необходимо создать экземпляр класса, чтобы обеспечить методам доступ к сведениям о состоянии.
Создание экземпляра класса
Экземпляр класса называется объектом. Для создания нового экземпляра класса следует использовать оператор 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 Code:
int result = Random.Next();Вы уже знаете, что
Next()это состоянием управляемый метод, однако в этом примере показано, как редактор Visual Studio Code реагирует при некорректной попытке доступа к методу.Обратите внимание, что под
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 для уточнения или руководства по этой теме?