Trabalho Prático Nº1 Introdução ao C#.NET 1. OBJECTIVOS - Entender o contexto da plataforma.net - Desenvolver programas simples em C#.NET - Saber efectuar entradas de dados em modo Consola e Windows Forms - Saber ler e escrever em ficheiros de texto Fundamentos da linguagem C# O objectivo do trabalho é efectuar uma introdução aos principais aspectos da linguagem C#, incluindo os tipos de dados intrínsecos (valor e referencia), estruturas de interacção e de decisão, o papel do system.object as técnicas básicas de construção de classes. Para a ilustração destes fundamentos da linguagem, vamos olhar para as livrarias.net base e construir um numero de aplicações exemplos utilizando vários espaços de nome.net Como a linguagem Java, C# manda que todas as instruções de programa devam ser inseridas no interior de uma definição de type, normalmente é uma classe. using System; class Class1 / <summary> / The main entry point for the application. / </summary> public static int Main(string[] args) TODO: Add code to start application here Console.WriteLine("Trabalho Prático N 1"); return 1; Microprocessadores III ano lectivo 2004/2005 Página 1 Trabalho Prático Nº1
O espaço de nome System contem as classes base e fundamentais que define os Types valor e referencia mais comummente usados. Outras classes suportam serviços de conversão de tipos de dados, manipulação de paramentos de métodos, Todo o código executável C#, deve conter uma classe com a definição de um método Main(), que é entendido como o ponto de entrada para a aplicação. Os métodos podem ser do tipo público ou estáticos, e devem ser entendidos que os públicos podem ser acedidos de outros Types enquanto que os estáticos apenas podem ser acedidos dentro do nível da classe em que são definidos sem necessidade de criar uma nova variável objecto Variações no Método Main O método Main anterior definido como void foi definido para receber um único parâmetro (matriz de strings) Sem saída, matriz de strings como argumentos public static void Main(string[] args) processa argumentos de linha de comando Sem saídas, sem argumentos public static void Main() Devolve inteiro, sem argumentos public static int Main() Processa argumentos de linha de comando Devolve um valor ao system Microprocessadores III ano lectivo 2004/2005 Página 2 Trabalho Prático Nº1
A escolha da construção do Main é baseada em duas escolhas, primeiro é necessário processar parâmetros de linha de comando? Se sim, serão armazenados numa matriz de strings, outra se for necessário devolver valores para o system quando o método Main terminar? Microprocessadores III ano lectivo 2004/2005 Página 3 Trabalho Prático Nº1
Processamento de parâmetros de linha de comando O programa abaixo permite processar paramentos em linha de comando: using System; / <summary> / Summary description for Class1. / </summary> class Class1 / <summary> / The main entry point for the application. / </summary> public static void Main(string[] args) TODO: Add code to start application here Console.WriteLine("Trabalho Prático N 1 leitura de argumentos de linha"); for (int x=0; x<args.length; x++) Console.WriteLine("Arg: 0", args[x]); return 1; Para a simulação do seu funcionamento, pose ser chamado em linha de comando ou então durante o desenvolvimento podemos simular possíveis argumentos nas propriedades do projecto em Configuration/Debugging node/ Command Line Arguments Microprocessadores III ano lectivo 2004/2005 Página 4 Trabalho Prático Nº1
Entradas e saídas básicas com a classe Console Quando não se desenvolvem aplicações baseadas em Windows ou web, quer dizer em ambiente consola são usados os métodos de classe Console (System.Console), em que os principais métodos são: Read() ReadLine() lê um simples caractere lê uma string até um <CR> Write() WriteLine() Escreve um caractere Escreve uma string e acrescenta um <CR> Para ilustrar a utilização da classe base Console, considere a utilização do seguinte programa, que solicita a entrada de strings de dados e o afixa. using System; namespace TP2 / <summary> / Summary description for Class1. / </summary> class BasicIO Microprocessadores III ano lectivo 2004/2005 Página 5 Trabalho Prático Nº1
/ <summary> / The main entry point for the application. / </summary> [STAThread] static void Main(string[] args) Console.Write("Escreva o nome: "); String s; s= Console.ReadLine(); Console.WriteLine("Olá, 0!",s); Escrita e leitura em ficheiros No framework. NET, o nome de espaço System.IO é a região da classe base da livraria para implementar os serviços de entrada e saída. Como qualquer outro espaço de nome define um conjunto de classes, interfaces, enumerações, estruturas e delegados Existem variadas possibilidades de ler e escrever em ficheiros, aqui apenas vamos considerar a leitura e escrita em modo texto, ou seja em codificação ASCII. As classes StreamWriter e StreamReader são úteis para uma escrita e leitura em modo texto. Escrita em ficheiro de texto Para se entender as capacidades de escrita da classe StreamWriter, é preciso compreender os membros da classe TextWriter. TextWriter Member Name Close() Flush() NewLine Write() WriteLine() Significado Fecha o writer e liberta os recursos associados. O buffer é automaticamente eliminado Limpa todos os buffers associados com o Writer, mas não o fecha. Constante de nova linha. O terminador de linha é um carriage return seguido por um line feed \r\n Escreve uma linha na stream de texto, sem a constante de nova linha Escreve uma linha na stream de texto, com a constante de nova linha Microprocessadores III ano lectivo 2004/2005 Página 6 Trabalho Prático Nº1
Os dois últimos membros da classe TextWriter já são familiares, pois o System.Console tem membros semelhantes para a escrita textual num dispositivo standard de saída por exemplo a console. Deve sempre ser garantido para evitar surpresas desagradáveis que Close() é sempre chamado. Leitura de ficheiro de texto Para compreender a leitura de ficheiros de texto usando StreamReader, será conveniente entender os membros da classe TextReader TextReader Member Name Peek() Read() ReadBlock() ReadLine() ReadToEnd() Significado Devolve o próximo caractere disponível sem alterar a posição do Reader Lê dados da Stream de entrada Lê o máximo contagem de caracteres do Stream escreve os dados num buffer Lê uma linha de caracteres da presente Stream e devolve os dados como uma string (uma string null indica EOF) Lê todos os caracteres a partir da posição presente até ao fim do TextReader e devolve como uma única string Trabalho: Abra o projecto LeFile e analise o seu funcionamento. Utilizando as Windows Forms O nome de espaço System.Windows.Forms contem um numero de types que representam os interfaces gráficos que podem ser utilizados para entrada e saída de dados de uma aplicação Trabalho: Abra o projecto TocadorCampainhas e analise o seu funcionamento. Microprocessadores III ano lectivo 2004/2005 Página 7 Trabalho Prático Nº1
Microprocessadores III ano lectivo 2004/2005 Página 8 Trabalho Prático Nº1