Definindo Classes e Criando Objetos
Classe é a definição para um tipo definido pelo usuário (UDT). Objeto é simplesmente um termo descrevendo uma determinada instância de uma classe na memória. No C#, a keyword new é o caminho para criar um objeto.
Para ilustrar o procedimento próprio para criação de objeto, observe abaixo:
using System;
class HelloClass
{
public static int Main(string[] args)
{
// Você pode declarar e criar um novo objeto em uma simples linha...
HelloClass c1 = new HelloClass();
// ... ou quebrar a declaração e criação em duas linhas.
HelloClass c2;
c2 = new HelloClass();
...
}
}
A keyword new, toma conta de calcular o número correto de bytes para o objeto especificado e adquirindo memória suficiente do managed heap. Aqui você alocou dois objetos da classe HeloClass. Variáveis de objeto em C#, realmente são uma referência ao objeto na memória, não o próprio objeto em si. Assim, c1 e c2 referenciam um único HelloClass objeto alocado na memória heap.
O papel dos Construtores
Toda classe em C#, possui um construtor padrão que você pode redefinir se necessário.
// HelloClass, com construtores
using System;
class HelloClass
{
public string strMensagem;
// Construtor padrão
public HelloClass()
{
Console.WriteLine("Construtor padrão chamado!");
}
// Construtor customizado
public HelloClass (string msg)
{
Console.WriteLine("Construtor customizado chamado!");
strMensagem = msg;
}
// Ponto de entrada do programa
public static int Main(string[] args)
{
// Chamando o construtor padrão
HelloClass c1 = new HelloClass();
Console.WriteLine("Mensagem do usuário: \n", c1.strMensagem);
// Chamando o construtor customizado
HelloClass c2;
c2 = new HelloClass("Testando, 1, 2, 3");
Console.WriteLine("Mensagem do usuário: ", c2.strMensagem);
Console.ReadLine();
return 0;
}
}
Definindo uma Aplicação Objeto
Vamos fazer uma reengenharia do programa para OO.
using System;
namespace HelloExemplo
{
#region Classe HelloClass
class HelloClass
{
// Ponto de estado dos dados
public string strMensagem ;
// Construtor padrão
public HelloClass()
{
Console.WriteLine("Construtor padrão chamado!");
}
// Construtor customizado
public HelloClass(string msg)
{
Console.WriteLine("Construtor customizado chamado!");
strMensagem = msg;
}
public void ListarMensagem()
{
Console.WriteLine("Mensagem: ", strMensagem );
}
}
#endregion
class HelloApp
{
// Ponto de entrada do programa.
public static int Main(string[] args)
{
#region Processa Command Line Args...
// Processa command line arguments...
Console.WriteLine("***** Command line args *****");
for (int x = 0; x < args.Length; x++)
{
Console.WriteLine("Argumentos: ", args[x]);
}
// Usando foreach!
Console.WriteLine("\n***** Você perdeu isso *****");
foreach (string s in args)
Console.WriteLine("Argumentos: ", s);
// Usando System.Environment
Console.WriteLine("\n***** Usando System.Environment *****");
string[] theArgs = Environment.GetCommandLineArgs();
Console.WriteLine(" O path para essa aplicação é: ", theArgs[0]);
for (int i = 1; i < theArgs.Length; i++)
Console.WriteLine("Argumentos: ", theArgs[i]);
Console.WriteLine();
#endregion
#region Usando System.Environment
// OS?
Console.WriteLine("Sistema Operacional: ", Environment.OSVersion);
// Diretório?
Console.WriteLine("Diretório: ", Environment.CurrentDirectory);
// Drives.
string[] drives = Environment.GetLogicalDrives();
for (int i = 0; i < drives.Length; i++)
Console.WriteLine("Drives : ", i, drives[i]);
// Versão .NET?
Console.WriteLine("Versão .NET: ", Environment.Version);
Console.WriteLine();
#endregion
// Chamando construtor padrão
HelloClass c1 = new HelloClass();
c1.ListarMensagem();
// Chamando construtor customizado
HelloClass c2;
c2 = new HelloClass("Testando, 1, 2, 3");
c2.ListarMensagem();
Console.ReadLine();
return 0;
}
}
}