Exercício - Chamar os métodos de uma classe .NET
- 12 minutos
Quer você tenha percebido ou não, você tem chamado métodos C# desde seu primeiro aplicativo "Olá, Mundo!". Esse aplicativo usa o WriteLine()Console método da classe para exibir a mensagem "Olá, mundo!".
No entanto, nem todas as classes e métodos são implementados da mesma maneira. Esta unidade abrange algumas das variantes mais comuns que você precisará entender ao usar métodos da Biblioteca de Classes do .NET. Além disso, irá aprender a encontrar e utilizar a documentação para compreender melhor cada método.
Como chamar métodos na Biblioteca de Classes .NET
Da experiência anterior com o método Console.WriteLine(), já deve ter conhecimento das noções básicas:
- Comece digitando o nome da classe. Nesse caso, o nome da classe é
Console. - Adicione o operador de acesso de membro, o
.símbolo. - Adicione o nome do método. Neste caso, o nome do método é
WriteLine. - Adicione o operador de invocação do método, que é um conjunto de parênteses.
() - Finalmente, especifique os argumentos que são passados para o método, se houver, entre os parênteses do operador de invocação do método. Nesse caso, especifique o texto que deseja que o
Console.WriteLine()método escreva no console (por exemplo,"Hello World!").
Opcionalmente, dependendo da forma como os programadores conceberam e implementaram o determinado método, também poderá ter de:
- Passe valores adicionais como parâmetros de entrada.
- Aceite um valor de retorno.
Na próxima unidade, você examinará como passar valores de entrada para um método e como um método pode ser usado para retornar um valor para a rotina de chamada.
Embora alguns métodos possam ser chamados da mesma maneira que você chamou Console.WriteLine(), existem outros métodos na biblioteca de classes do .NET que exigem uma abordagem diferente.
Prepare seu ambiente de codificação
Este módulo inclui atividades de codificação que o guiam através do processo de criação e execução de código de exemplo. Você é incentivado a concluir essas atividades usando o Visual Studio Code como seu ambiente de desenvolvimento. Usar o Visual Studio Code para essas atividades ajudará você a se sentir mais confortável escrevendo e executando código em um ambiente de desenvolvedor usado por profissionais em todo o mundo.
Abre Visual Studio Code.
Você pode usar o menu Iniciar do Windows (ou recurso equivalente para outro sistema operacional) para abrir o Visual Studio Code.
No menu Arquivo de código do Visual Studio, selecione Abrir pasta.
Na caixa de diálogo Abrir pasta, navegue até a pasta Área de trabalho do Windows.
Se você tiver um local de pasta diferente onde você mantém projetos de código, você pode usar esse local de pasta em vez disso. Para este treinamento, o importante é ter um local que seja fácil de localizar e lembrar.
Na caixa de diálogo Abrir pasta , selecione Selecionar pasta.
Se vir uma caixa de diálogo de segurança a perguntar se confia nos autores, selecione Sim.
No menu Terminal de código do Visual Studio, selecione Novo terminal.
Observe que um prompt de comando no painel Terminal exibe o caminho da pasta atual. Por exemplo:
C:\Users\someuser\Desktop>Observação
Se você estiver trabalhando em seu próprio PC em vez de em uma área restrita ou ambiente hospedado e tiver concluído outros módulos do Microsoft Learn nesta série C#, talvez já tenha criado uma pasta de projeto para exemplos de código. Se esse for o caso, você pode pular a próxima etapa, que é usada para criar um aplicativo de console na pasta TestProject.
No prompt de comando do Terminal, para criar um novo aplicativo de console em uma pasta especificada, digite o seguinte prompt:
dotnet new console -o ./CsharpProjects/TestProjectEste comando .NET CLI usa um modelo de programa .NET para criar um novo projeto de aplicativo de console C# no local da pasta especificada. O comando cria as pastas CsharpProjects e TestProject para você e usa TestProject como o nome do seu
.csprojarquivo.Se for exibida uma mensagem informando que os arquivos já existem, continue com as próximas etapas. Você reutilizará os arquivos de projeto existentes.
Na visualização EXPLORER, expanda a pasta CsharpProjects .
Você deve ver a pasta TestProject e dois arquivos, um arquivo de programa C# chamado Program.cs e um arquivo de projeto C# chamado TestProject.csproj.
No menu Arquivo de código do Visual Studio, selecione Abrir pasta.
Na caixa de diálogo Abrir pasta , selecione a pasta CsharpProjects e, em seguida, selecione Selecionar pasta.
No modo de exibição EXPLORER, expanda a pasta TestProject e selecione Program.cs.
Exclua as linhas de código existentes.
Você usará este projeto de console C# para criar, compilar e executar exemplos de código durante este módulo.
Feche o painel Terminal.
Chamar diferentes tipos de métodos na biblioteca de classes do .NET
No Editor de Código do Visual Studio, para criar um exemplo de código que implemente métodos das classes
System.RandomeSystem.Console, introduza o seguinte código:Random dice = new Random(); int roll = dice.Next(1, 7); Console.WriteLine(roll);Esse código simula um rolo de dados usando o
Random.Next()método para gerar um número e oConsole.WriteLine()método para exibir o valor.Observação
Você examinará o código em detalhes mais adiante nesta unidade.
No menu "Arquivo" do Visual Studio Code, clique em "Salvar".
Na vista EXPLORER, para abrir um Terminal na localização da pasta TestProject, clique com o botão direito do rato em TestProject e, em seguida, selecione Abrir no Terminal Integrado.
Observe que o painel Terminal inclui um prompt de comando que exibe um caminho de pasta. Por exemplo:
C:\Users\someuser\Desktop\CsharpProjects\TestProject>Quando você usa o Terminal para executar comandos da CLI do .NET, os comandos são executados a partir do local da pasta exibida. Verifique se a pasta de código corresponde ao caminho da pasta exibido no prompt de comando antes de criar ou executar o código.
No prompt de comando do Terminal, para executar o código, digite dotnet run e pressione Enter.
Observe que um número de 1 a 6 é exibido na saída do console (o número de pontos nos dados). Se você executar o código vezes suficientes, verá cada um dos números de 1 a 6 exibidos.
Reserve um minuto para examinar a sintaxe usada para aceder aos métodos
Next()eWriteLine().Observe que você usa técnicas diferentes para acessar os métodos.
Random dice = new Random(); int roll = dice.Next(1, 7); Console.WriteLine(roll);Na terceira linha de código, você inclui uma referência à
Consoleclasse e chama oConsole.WriteLine()método diretamente. No entanto, você usa uma técnica diferente para chamar oRandom.Next()método. A razão para usares duas técnicas diferentes é que alguns métodos guardam estado ('stateful') e outros não guardam estado ('stateless'). Examinará a diferença entre métodos com estado e sem estado na próxima seção.
Métodos com estado versus sem estado
Em projetos de desenvolvimento de software, o termo estado é usado para descrever a condição do ambiente de execução em um momento específico no tempo. À medida que o seu código é executado linha por linha, os valores são armazenados em variáveis. Em qualquer momento durante a execução, o estado atual da aplicação é a coleção de todos os valores armazenados na memória.
Alguns métodos não dependem do estado atual da aplicação para funcionar corretamente. Por outras palavras, os métodos sem estado são implementados para que possam funcionar sem referenciar ou alterar valores já armazenados na memória. Os métodos sem estado também são conhecidos como métodos estáticos.
Por exemplo, o método Console.WriteLine() não depende de valores armazenados na memória. Efetua a sua função e termina sem afetar o estado da aplicação de qualquer forma.
Outros métodos, no entanto, têm de ter acesso ao estado da aplicação para funcionar adequadamente. Em outras palavras, os métodos stateful são construídos de tal forma que dependem de valores armazenados na memória por linhas anteriores de código que já foram executadas. Em alternativa, modificam o estado da aplicação ao atualizar valores ou armazenar novos valores na memória. Também são conhecidos como métodos de instância.
Os métodos com estado (instância) monitorizam o estado nos campos, que são variáveis definidas na classe. Cada nova instância da classe obtém a sua própria cópia desses campos nos quais armazenar o estado.
Uma única classe pode suportar métodos com estado e sem estado. No entanto, quando tem de chamar métodos com estado, tem de criar uma instância da classe para que o método possa aceder ao estado.
Criando uma instância de uma classe
Uma instância de uma classe é chamada como um objeto. Para criar uma nova instância de uma classe, tem de utilizar o operador new. Considere a seguinte linha de código que cria uma nova instância da classe Random para criar um novo objeto chamado dice:
Random dice = new Random();
O operador new faz várias ações importantes:
- Primeiro, pede um endereço na memória do computador grande o suficiente para armazenar um novo objeto com base na classe
Random. - Cria o novo objeto e armazena-o no endereço de memória.
- Ele retorna o endereço de memória para que ele possa ser salvo no
diceobjeto.
A partir desse ponto, quando o dice objeto é referenciado no código, o .NET Runtime executa uma pesquisa nos bastidores para dar a ilusão de que você está trabalhando diretamente com o próprio objeto.
Seu código usa o dice objeto como uma variável que armazena o Random estado da classe. Quando você chama o Next()dice método no objeto, o método usa o estado armazenado no dice objeto para gerar um número aleatório.
A versão mais recente do .NET Runtime permite que você instancie um objeto sem ter que repetir o nome do tipo (invocação do construtor de tipo de destino). Por exemplo, o código a seguir criará uma nova instância da Random classe:
Random dice = new();
A intenção é simplificar a legibilidade do código. Você usa sempre parênteses ao escrever uma expressão do tipo alvo new.
Porque é que o método Next() tem estado?
Deve estar a perguntar-se porque é que o método Next() foi implementado como um método com estado? Os criadores da Biblioteca de Classes .NET não conseguem descobrir uma forma de gerar um número aleatório sem exigir o estado? O que está a ser armazenado ou referenciado pelo método Next()?
São perguntas legítimas. A um nível elevado, os computadores são bons a seguir instruções específicas para criar um resultado repetível e fiável. Para criar a ilusão de aleatoriedade, os programadores do método Next() decidem capturar a data e a hora até à fração de um milissegundo e utilizam isso para efetuar o seeding de um algoritmo que produz um número diferente de cada vez. Embora não seja totalmente aleatório, é suficiente para a maioria das aplicações. O estado que é capturado e mantido durante o tempo de vida do objeto dice é o valor da semente. Cada chamada subsequente ao método Next() executa novamente o algoritmo, mas garante que a semente é alterada para que o mesmo valor não seja devolvido (necessariamente).
Para usar o Random.Next() método, no entanto, você não precisa entender como ele funciona. A coisa importante a saber é que alguns métodos exigem que você crie uma instância de uma classe antes de chamá-los, enquanto outros não.
Como pode determinar se precisa de criar uma instância de uma classe antes de chamar os métodos?
Uma abordagem para determinar se um método é com estado ou sem estado é consultar a documentação. A documentação inclui exemplos que mostram se o método deve ser chamado da instância do objeto ou diretamente da classe.
Observação
Talvez seja necessário rolar para baixo na página de documentação para encontrar os exemplos de código.
Como alternativa à pesquisa na documentação do produto, você pode tentar acessar o método diretamente da própria classe. Se funcionar, você sabe que é um método sem estado. O pior que pode acontecer é que irá obter um erro de compilação.
Tente acessar o Random.Next() método diretamente e veja o que acontece.
Insira a seguinte linha de código no Editor de Códigos do Visual Studio:
int result = Random.Next();Você já sabe que
Next()é um método stateful, no entanto, este exemplo demonstra como o Editor de Códigos do Visual Studio reage quando você tenta acessar um método incorretamente.Observe que uma linha ondulada vermelha aparece em
Random.Next, indicando que você tem um erro de compilação.Se o método que você está interessado em usar for sem estado, nenhuma linha ondulada vermelha aparecerá.
Passe o ponteiro do mouse sobre a linha ondulada vermelha.
Uma janela pop-up deve aparecer com a seguinte mensagem:
(1,14): error CS0120: An object reference is required for the non-static field, method, or property 'Random.Next()'Como você viu no código no início da unidade, você pode corrigir esse erro criando uma instância da
Randomclasse antes de acessar oNext()método. Por exemplo:Random dice = new Random(); int roll = dice.Next();Neste caso, o
Next()método é chamado sem parâmetros de entrada.
Recapitulação
- Para chamar métodos de uma classe na Biblioteca de Classes .NET, utilize o formato
ClassName.MethodName(), em que o símbolo.é o operador de acesso de membro para aceder a um método definido na classe e os símbolos()são os operadores de invocação de método. - Ao chamar um método sem estado, não tem de criar primeiro uma nova instância da classe.
- Ao chamar um método com estado, tem de criar uma instância da classe e aceder ao método no objeto.
- Utilize o operador
newpara criar uma nova instância de uma classe. - Uma instância de uma classe é chamada como um objeto.