O programa mais simples que se pode criar em C# está abaixo:
class Program
{
static void Main(string[] args)
{
}
}
Acima declaramos uma classe chamada Program. Esta classe contém um método estático (static), que não retorna nada (void) com o nome Main. Este método aceita um arqumento chamado args, que é uma lista de strings.
Este programa minúsculo não faz nada, mas apresenta conceitos fundamentais. Todo programa em C# é uma classe. Todo programa em C# que é para ser rodado via console (DOS), deve ter obrigatoriamente um ponto de entrada. Um lugar no qual o .NET Framework saiba onde começar a rodar o programa. Seu programa pode ter centenas de classes, mas apenas uma classe deve conter o método “Main”.
Veremos o que são métidos estáticos quando falarmos de orientação a objetos. Por hora, basta saber que qualquer programa que iremos fazer para console deve ter um método static void Main(string[] args).
Este programa não faz nada, mas vamos mudar isso, fazendo ele mostrar no console as palavras “Hello, world!”.
Devemos anterar o método Main:
class Program
{
static void Main(string[] args)
{
System.Console.WriteLine("Hello, World!");
}
}
Quando rodamos este programa, o .NET Framework procura pelo ponto de entrada, que é o método main, e, quando encontra, invoca este método.
O nosso método pretende imprimir uma linha no console. Portando iremos usar o método WriteLine da classe Console. A Classe Console encapsula entrada e saída de informações para a nossa linha de comando (DOS).
Quem escreveu esta classe Console para mim ? A Microsoft, em seu .NET Framework. O .NET Framework é composto de centenas de classes prontas para nosso uso, precisamos apenas saber qual classe usar em qual situação.
Como existem centenas de classes, muitas vezes podemos escrever uma classe com o mesmo nome de uma já existente, e desta maneira, o compilador não saberia qual classe desejamos usar, se é a nossa ou se é a da .NET Framework ou se é uma já desenvolvida por outra pessoa da equipe. Pensando nisso que surgiu o conceito de namespace.
Namespace ajudam a resolver esse problema criando um contêiner nomeado para outros identificadores, por exemplo, classes. Duas classes com o mesmo nome não serão confundidas se elas estiverem em namespaces diferentes.
namespace Hello
{
class Program
{
static void Main(string[] args)
{
System.Console.WriteLine("Hello, World!");
}
}
}
Criamos um namespace Hello, e dentro deste namespace, nossa classe Program. Agora, podemos ter outras classes com o mesmo nome, desde que estejam em outro namespace.
Como nos referenciamos a uma classe que está em um namespace diferente ?
Utilize o padrão: namespace.classe
Foi por isso que usamos o namespace System antes da classe Console no nosso programa.
System é o namespace. Console é o nome da classe. WriteLine é o nome do método.
Para encurtar nosso programa, podemos declarar que desejamos usar um determinado namespace em nosso programa, e a partir daí, podemos omitir o namespace na hora de utilizar uma classe. Fazemos isso com a palavra reservada using.
Nosso programa ficaria assim:
using System;
namespace Hello {
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}
}
Note que a partir do momento em que declarei o namespace System no início do programa, não precisei mais digitá-lo para acessar a classe Console.