Desenvolvimento - C#

Série aprenda C# - Tipos de dados e CTS (Common Type System)

Neste segundo artigo da série aprenda C# você verá qual a cara de um programa escrito em C# e o que representa cada parte, além dos tipos básicos de dados da linguagem, o que são variáveis e constantes.

por Cleber Dantas



Público: Iniciante.

No ultimo artigo vimos uma introdução a plataforma .NET e ao C# (Csharp)

http://www.linhadecodigo.com.br/artigos.asp?id_ac=984&pag=1

Introdução

Neste segundo artigo da série aprenda C# você verá qual a cara de um programa escrito em C# e o que representa cada parte, além dos tipos básicos de dados da linguagem, o que são variáveis e constantes.

Meu primeiro programa em C#

Agora veremos como é a cara de um programa escrito em C# e explicaremos as partes que o compõem, como já é de praxe vamos ver como fica o famoso Hello World em C#, veja:

using System;

class Hello

{

public static void Main ()

{

//Emite a mensagem Hello World!!! na tela

Console.WriteLine("Hello World!!!");

}

}

No código acima vemos um programa muito simples que nos mostra uma única mensagem, porém a muito a ser explicado. Mãos a obra.

Vamos ver o que significa a seguinte linha:

using System;

A keyword ‘using’ importa o Namespace ‘System’ para nosso programa, ou seja, para que todas as classes e métodos do Namespace ‘System’ possam ser usados em nosso programa. Atente-se ao ponto e virgula(;) no final da instrução.

Depois dessa afirmação você já deve ter algumas perguntas em mente como, por exemplo:

1ª O que é um NameSpace?

2ª O que é importar um Namespace?

Vamos às respostas.

O que é um NameSpace?

De uma maneira simples um Namespace é um agrupamento lógico de funcionalidades, no artigo passado falei sobre o .NET Framework e nele temos a .NET Class Library que é um conjunto de classes integrada com o ambiente de execução – CLR. Esse conjunto de classes faz diversas coisas como, por exemplo, manipulação de arquivos, segurança e etc. Agora como que essas milhares (milhares mesmo) de classes são organizadas? A resposta é simples, são organizadas em Namespaces, por exemplo, as classes que tratam de manipulação de arquivos são dispostas dentro do Namespace ‘System.IO’, já as que trabalham com acesso a dados são organizadas dentro do Namespace ‘System.Data’ e etc. Ou seja, tudo isso é para termos uma melhor organização de nossas classes, quando quisermos trabalhar com acesso a dados já sabemos que teremos que usar as classes do Namespace ‘System.Data’ e assim por diante.

O que é importar um Namespace?

No nosso exemplo estamos utilizando o Namespace ‘System’ mais especificamente a classe ‘Console’ deste Namespace e por sua vez o método ‘WriteLine’ da classe ‘Console’ que simplesmente exibe uma mensagem na tela. Se não estivéssemos importando o Namespace ‘System’ com a keyword ‘using’ para usarmos o método ‘WriteLine’ da classe ‘Console’ teríamos que digitar o caminho completo do método nesse caso: ‘System.Console.WriteLine’, ou seja, fazemos a importação para facilitar a nossa vida, assim uma vez importado o Namespace podemos usar as classes do mesmo sem digitar o caminho completo o que economiza digitação.

Declaração da classe

class Hello

{

...

}

O código acima é onde definimos nossa classe, a lógica de um programa em C# deve sempre estar dentro de uma definição de tipo nesse caso uma classe. Veja que a definição de nossa classe começa na abertura da chave({) e termina em seu fechamento(}).

Declaração do método Main

public static void Main ()

{

}

Dentro da nossa definição de classe temos um método chamado ‘Main’ todo programa em C# tem um método Main é o ponto de partida do programa, ou seja, a execução do aplicativo se inicia aqui.

O método também inicia com a abertura de chave ({) e termina com seu fechamento (})

Comentários

//Emite a mensagem Hello World!!! na tela

Aqui temos um comentário, quando deixamos um comentário em nosso programa ele simplesmente é ignorado pelo compilador assim não causando nenhum erro. Em C# temos algumas maneiras de fazermos comentários veja.

Comentário em uma única linha:

//Única linha, usa-se duas barras.

Comentário com múltiplas linhas:

/* Comentário com mais

de uma linha, usamos uma barra e um asterisco no começo e no final um asterisco e uma barra */

OBS: É uma boa pratica sempre deixar comentários em nossos códigos, assim podemos lembrar no futuro o que foi feito ali.

Escrevendo na tela

Console.WriteLine("Hello World!!!");

Na linha acima estamos usando o método ‘WriteLine’ da classe ‘Console’ que por sua vez fica localizada no Namespace ‘System’ que simplesmente nos emite uma mensagem nesse caso ‘Hello World’. Atente-se que no final da instrução temos o ponto e virgula (;).

Testando nosso programa

Partindo do princípio que você já tenha o .NET Framework instalado em sua máquina para testarmos nosso programa devemos copiar e colar esse código no bloco de notas, por exemplo, e salvar o documento com a extensão ‘.cs’ (Csharp), depois de feito isso devemos agora compilar nosso programa com o compilador de linha de comando ‘csc.exe’ que normalmente se encontra em C:\WinDir\Microsoft.NET\Framework\V1.1.4322 onde ‘WinDir’ é a pasta de instalação do Windows. Mas antes de qualquer coisa devemos configurar nossas variáveis de ambiente para evitarmos ficar digitando o caminho inteiro onde se encontra o compilador, para configurarmos basta abrir o prompt de comando (Iniciar | Executar | cmd) e digitar:

path C:\Windows\Microsoft.NET\Framework\V1.1.4322

Feito isso temos acesso ao compilador em qualquer diretório que estivermos.

OBS: Esse é o caminho da minha máquina verifique o caminho correto de seu computador.

Compilando

Eu salvei meu arquivo com o nome de ‘Hello.cs’ no seguinte caminho:

C:\Linha de codigo\Exemplos

E para compilar faça:

csc Hello.cs

Como na imagem a seguir (respeitando onde foi salvo seu arquivo):

Figura 1: Compilando o Hello World

Veja que é gerado um arquivo ‘Hello.exe’ para executá-lo basta digitar ‘Hello’ no diretório onde ele foi salvo:

Figura 2: programa sendo executado

Bom aqui finaliza nosso primeiro programa em C#, vimos o que significa cada parte do programa, aprendemos a configurar as variáveis de ambiente e a compilar nosso programa, agora vamos ver o que são métodos.

Métodos (Funções e rotinas)

Já citei várias vezes métodos neste artigo, mas não tive a oportunidade de explicar o que é um método por isso eis às definições.

Um método pode ser tanto uma função ou uma rotina:

Rotina: Executa alguma ação e não retorna nada.

Função: Executa alguma ação e retorna algum resultado sempre.

Em C# para criarmos uma rotina fazemos assim:

<modificador de acesso> void <nome da rotina>()

{

...

}

Exemplo:

public void MinhaRotina()

{

x = 1;

}

Neste caso temos uma rotina, pois void (vazio) significa que não há nenhum retorno simplesmente uma ação. Neste caso atribuindo o valor 1 a variável x.

E uma função é feita assim:

<modificador de acesso> <tipo de dado> <nome da função>()

{

...

}

Exemplo:

public string MinhaFuncao()

{

return “Isto é uma função pois retorna algo.”;

}

Neste caso temos uma função, pois ao invés de void (vazio) temos um valor de retorno nesse caso uma string.

Tipos de dados

Como toda linguagem de programação o C# tem seus tipos de dados básicos que são comuns a todas as linguagens habilitadas ao .NET, isso significa dizer que um inteiro (int) em C# tem a mesma estrutura e quantidades de bytes de um inteiro (Integer) em VB. Na verdade int (um inteiro de 32 bits e C#) e Integer (um inteiro de 32 bits em VB) são apenas Alias (apelidos) para os tipos ‘reais’ do CTS (Common Type System), veja a tabela:

Tipo C#

Tipo .NET(CTS)

Faixa de dados

Descrição

bool

System.Boolean

true ou false

Booleano

byte

System.Byte

-127 a 128

Inteiro de 8-bit com sinal

char

System.Char

U+0000 a U+ffff

Caracter Unicode de 16-bit

decimal

System.Decimal

1,0 × 10-28 a 7,9 × 1028

Inteiro de 96-bit com sinal com 28-29 dígitos significativos

double

System.Double

±5,0 × 10-324 a ±1,7 × 10308

Flutuante IEEE 64-bit com

15-16 dígitos significativos

float

System.Single

±1,5 × 10-45 a ±3,4 × 1038

Flutuante IEEE 32-bit com

7 dígitos significativos

int

System.Int32

-2.147.483.648 a 2.147.483.647

Inteiro de 32-bit com sinal

long

System.Int64

–9,223,372,036,854,775,808 a 9,223,372,036,854,775,807

Inteiro de 64-bit com sinal

Object

System.Object

Classe base

Sbyte

System.Sbyte

0 a 255

Inteiro de 8-bit sem sinal

Short

System.Int16

-32,768 a 32,767

Inteiro de 16-bit com sinal

String

System.String

String de caracteres Unicode

Uint

System.UInt32

0 a 4,294,967,295

Inteiro de 32-bit sem sinal

Ulong

System.UInt64

0 a 18,446,744,073,709,551,615

Inteiro de 64-bit sem sinal

Ushort

System.UInt16

0 a 65,535

Inteiro de 16-bit sem sinal

Ou seja, float, por exemplo, é apenas um apelido para System.Sigle (Tipo .NET)

Além disso os tipos de dados em C# podem ser divididos em 2:

  • Value Types
  • Reference Types

Quando passamos como parâmetro de um método um Value Type estamos passando um COPIA de seu conteúdo em quanto Reference Type estamos passando uma Referencia (endereço de memória) do valor original, ou seja, na prática o que ocorre é que se alterarmos nesse método o valor passado (Value type) o valor original da variável não é alterado, mas se passarmos um reference type para o parâmetro do método e alterarmos o valor no método o valor estará sendo mudado na variável original.

Variáveis

Durante a execução de um programa, dados são armazenados temporariamente na memória. Uma variável é um nome que se dá a um local na memória que armazena um certo tipo de dado, assim cada variável esta associada com um tipo de dado e um valor. Em C# declaramos variáveis assim:

<tipo de dado> <variavel>;

Exemplo:

int i;

Ainda poderíamos declarar essa mesma váriavel usando o tipo .NET assim:

System.Int32 i;

Nesse caso será reservado um espaço de 4 Bytes(32bits) na memória para armazenar um valor do tipo inteiro, que será referenciado no resto do programa pelo identificador ‘i’ (nome). Você também pode inicializar variáveis em sua declaração alem de poder também declarar mais de um por linha, veja:

int i = 5;

double d1, d2;

bool fechado = false, aberto = true;

Cuidado – Case-sensitive

O C# é Case-Sensitive, ou seja, diferencia maiúsculas de minúsculas.

Isso:

int num1;

é diferente de:

int Num1;

Constantes

Constantes como próprio nome sugere são variáveis que uma vez definida seu valor ela não poderá ser mudado pelo programa, em C# declaramos constantes com a keyword const, veja:

const <tipo de dados> <nome> = <valor>;

Exemplo:

const double PI = 3.14;

Vale lembrar que uma constante deve sempre ser inicializada em sua declaração caso contrário será gerado um erro.

Conversões de dados

Existem dois tipos de conversões:

  • Explícitas
  • Implícitas

Quando uma variável pode ser mais de um tipo, o recurso de conversão explícita pode ser usado veja:

float x;

double y = 10.5;

x = (float) y;

Estamos atribuindo um valor a variável x do tipo float, e esse valor é a variável y que por sua vez é do tipo double e neste caso fazendo uma conversão explícita (cast) de um tipo para o outro.

Já nas conversões implícitas isso ocorre de forma transparente nas atribuições de variáveis e passagens de parâmetros de métodos, desde que você não use o cast, veja:

long x;

int y = 5;

x = y;

Neste caso estamos pegando o valor de y e simplesmente atribuindo a variável x do tipo long, isso pode ser feito sem problemas.

Conclusão

Neste artigo vimos a cara de um programa escrito em C#, seus tipos de dados básicos, o que são funções e rotinas, aprendemos o que são conversões, a configurar nossas variáveis de ambiente, a compilar um programa e o que são variáveis e constantes. Espero que tenham gostado e no próximo artigo falaremos sobre os Operadores em C#, aguardo vocês.

Qualquer dúvida, crítica ou sugestão fale comigo: cleberwd@hotmail.com
Cleber Dantas

Cleber Dantas - Ministra palestras e mini-cursos, MSP (Microsoft Student Partner), MCAD (Microsoft Certified Application Developer) e MCTS (Microsoft certified Technology Specialist). Membro do comitê Web/Infra do INETA Brasil (International .NET Association), colaborador do Portal Linha de código e IMasters. Trabalha com a plataforma .NET desde 2003.