Упражнение. Вызов методов класса .NET

Завершено

Вы поняли это или нет, вы вызывали методы 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 для этих действий поможет вам стать более удобным написанием и выполнением кода в среде разработчика, которая используется специалистами по всему миру.

  1. Откройте Visual Studio Code.

    Для открытия Visual Studio Code можно использовать меню Windows (или эквивалентный ресурс для другой ОС).

  2. В меню "Файл Visual Studio Code" выберите "Открыть папку".

  3. В диалоговом окне "Открыть папку" перейдите в папку "Рабочий стол Windows".

    Если у вас есть другое расположение папки, в котором хранятся проекты кода, вместо этого можно использовать это расположение папки. Для этого обучения важно иметь расположение, которое легко найти и помнить.

  4. В диалоговом окне "Открыть папку" выберите "Выбрать папку".

    Если появится диалоговое окно безопасности с запросом доверия авторам, нажмите кнопку "Да".

  5. В меню терминала Visual Studio Code выберите новый терминал.

    Обратите внимание, что в командной строке на панели терминала отображается путь к папке текущей папки. Рассмотрим пример.

    C:\Users\someuser\Desktop>
    

    Примечание.

    Если вы работаете на собственном компьютере, а не в песочнице или размещенной среде, и вы выполнили другие модули Microsoft Learn в этой серии C#, возможно, вы уже создали папку проекта для примеров кода. Если это так, можно пропустить следующий шаг, который используется для создания консольного приложения в папке TestProject.

  6. В командной строке терминала создайте консольное приложение в указанной папке, введите dotnet new console -o ./CsharpProjects/TestProject и нажмите клавишу ВВОД.

    Эта команда .NET CLI использует шаблон программы .NET для создания проекта консольного приложения C# в указанном расположении папки. Команда создает папки CsharpProjects и TestProject для вас .csproj и использует TestProject в качестве имени файла.

  7. На панели обозревателя разверните папку CsharpProjects .

    Вы увидите папку TestProject и два файла, файл программы C# с именем Program.cs и файл проекта C# с именем TestProject.csproj.

  8. На панели обозревателя для просмотра файла кода на панели редактора выберите Program.cs.

  9. Удалите существующие строки кода.

    Вы будете использовать этот консольный проект C# для создания, сборки и запуска примеров кода во время этого модуля.

  10. Закройте панель терминала.

Вызов различных типов методов в библиотеке классов .NET

  1. Чтобы создать пример кода, реализующий методы и System.Console классыSystem.Random, в редакторе Visual Studio Code введите следующий код:

    Random dice = new Random();
    int roll = dice.Next(1, 7);
    Console.WriteLine(roll);
    
    

    Этот код имитирует ролл dice с помощью Random.Next() метода для создания числа и Console.WriteLine() метода для отображения значения.

    Примечание.

    Далее в этом уроке вы изучите код.

  2. В меню "Файл Visual Studio Code" нажмите кнопку "Сохранить".

  3. На панели обозревателя откройте терминал в папке TestProject, щелкните правой кнопкой мыши TestProject и выберите "Открыть в интегрированном терминале".

    Обратите внимание, что панель терминала содержит командную строку, отображающую путь к папке. Например:

    C:\Users\someuser\Desktop\CsharpProjects\TestProject>

    При использовании терминала для запуска команд CLI .NET эта папка находится в месте выполнения команд. Убедитесь, что папка кода соответствует пути к папке, отображаемой в командной строке перед сборкой или запуском кода.

  4. В командной строке терминала, чтобы запустить код, введите dotnet run и нажмите клавишу ВВОД.

    Обратите внимание, что число от 1 до 6 отображается в выходных данных консоли (количество точек на кости). При достаточном времени выполнения кода вы увидите каждый из отображаемых чисел.

  5. Минуту, чтобы проверить синтаксис, используемый для доступа к 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 осуществляет поиск в фоновом режиме, благодаря чему имитируется работа непосредственно с самим объектом.

Последняя версия среды выполнения .NET позволяет создать экземпляр объекта, не повторяя имя типа (вызов целевого конструктора). Например, следующий код создаст новый экземпляр Random класса:

Random dice = new();

Цель заключается в упрощении удобочитаемости кода. При написании целевого типа new выражения всегда используются скобки.

Почему метод Next() реализован с отслеживанием состояния?

С чем связана такая реализация метода Next()? Обязательно ли было разработчикам библиотеки классов .NET отслеживать состояние приложения при генерации случайного числа? Что именно сохраняет или на что ссылается метод Next()?

Эти вопросы вполне понятны. В целом компьютер — это надежный инструмент для четкого выполнения заданных инструкций и получения воспроизводимого результата. Чтобы внести элемент случайности, разработчики метода Next() получают значение даты и времени с точностью до долей миллисекунд и используют это значение в качестве входных данных для алгоритма, который в каждый момент времени генерирует разные числа. Несмотря на то что такой подход не гарантирует абсолютную случайность результата, он достаточен для большинства приложений. Состояние, которое фиксируется и сохраняется в течение времени существования dice объекта, является начальным значением. При каждом последующем вызове метода Next() этот алгоритм выполняется снова, благодаря чему начальное значение гарантированно изменяется и возвращается новое значение.

Чтобы использовать метод Random.Next(), не нужно понимать, как он работает. Важно помнить, что перед вызовом некоторых методов требуется создать экземпляр класса, а другие методы этого не требуют.

Как определить, нужно ли создавать экземпляр класса перед вызовом его методов?

Один из способов определения того, является ли метод отслеживанием состояния или без отслеживания состояния, заключается в том, чтобы обратиться к документации. Документация содержит примеры, показывающие, должен ли метод вызываться из экземпляра объекта или непосредственно из класса.

Примечание.

Чтобы найти примеры кода, может потребоваться прокрутить вниз на странице документации.

В качестве альтернативы поиску по документации по продукту можно попытаться получить доступ к методу непосредственно из самого класса. Если это работает, вы знаете, что это метод без отслеживания состояния. В худшем случае произойдет ошибка компиляции.

Попробуйте получить доступ к методу Random.Next() напрямую и узнать, что произойдет.

  1. Введите следующую строку кода в редактор Visual Studio Code:

    int result = Random.Next();
    
    

    Вы уже знаете, что Next() это метод с отслеживанием состояния, однако в этом примере показано, как редактор Visual Studio Code реагирует при попытке доступа к методу неправильно.

  2. Обратите внимание, что в нижней строке отображается Random.Nextкрасная линия, указывающая на наличие ошибки компиляции.

    Если метод, который вы хотите использовать, является без отслеживания состояния, не появится красная линия.

  3. Наведите указатель мыши на красную волнистую линию.

    Всплывающее окно должно появиться со следующим сообщением:

    (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.
  • Экземпляр класса называется объектом.

Проверьте свои знания

1.

Какой из следующих элементов представляет правильный способ создания экземпляра класса?

2.

Разработчик создает экземпляр Random класса с именем coins. Какие из следующих строк кода можно использовать для вызова Next() метода?