Você está na página 1de 61

Curso de programação em C# Mega News Informática - Módulo 1

CURSO DE PROGRAMAÇÃO EM C#

MÓDULO 1

Aluno: ______________________

1
Curso de programação em C# Mega News Informática - Módulo 1

As vantagens no uso da plataforma .NET

A plataforma .NET é um ambiente de desenvolvimento e execução de aplicações que integra diferentes


linguagens de programação e facilita a distribuição destas aplicações por diversos aparelhos como dispositivos
móveis, computadores pessoais e servidores. Seu padrão de desenvolvimento de Web Services utiliza-se de código
XML, que possibilita que aplicativos externos de terceiros (ou não) comuniquem-se com o seu aplicativo não
importando o tipo de computador, linguagem ou sistema operacional que estejam usando.
As vantagens do uso do .NET são muitas. A alta portabilidade do código diminui a preocupação do desenvolvedor
com o dispositivo que irá rodar a aplicação. O requisito essencial é que o dispositivo possua uma instalação funcional
da plataforma .NET.
O gerenciamento de memória é uma das outras grandes vantagens. O espaço destinado aos objetos que não
estão sendo mais utilizados é automaticamente disponibilizado na memória pela CLR. Este procedimento é
importante para a liberação de recursos que as aplicações utilizam de maneira extensiva para todos os tipos de
tarefas, das mais simples às mais complexas.
A plataforma .NET também possui uma biblioteca de componentes comuns (Base Class Library) que visa facilitar o
desenvolvimento de aplicações. Essa biblioteca é um conjunto de objetos (classes) distribuídos através de
namespaces.
A compatibilidade entre os tipos das diversas linguagens utilizadas pelo .NET é TOTAL. Isso deve-se ao fato
de que todos os tipos são instâncias de tipos definidos dentro da classe Object. Afinal, tudo em .NET são objetos.
Assim, fica mais fácil a conversão do código escrito em uma linguagem para outra.
Todos os programas desenvolvidos para a plataforma .NET são compilados duas vezes. Na primeira (quando
é feita a distribuição) o código gerado é um tipo de código intermediário conhecido como bytecodes, em uma
linguagem chamada Microsoft Intermediate Language. Na primeira execução do programa é feita a segunda
compilação, desta vez para um código de nível mais baixo, compatível com o dispositivo no qual a aplicação está
instalada. Todas as futuras execuções desta aplicação fazem uso deste código.

Vamos entender melhor o funcionamento da plataforma e seus principais componentes:


CLR

2
Curso de programação em C# Mega News Informática - Módulo 1

O Common Language Runtime é o ambiente de execução. É usado por qualquer aplicação .NET independente da
linguagem em que foi desenvolvida. É ele quem faz a limpeza da memória através do Garbage Collector.
CTS
O Common Type System é parte integrante da CLR e possui todas as definições dos tipos .NET e seus respectivos
métodos. Esses tipos serão usados por qualquer linguagem .NET. Como já foi dito: todos os tipos são objetos
derivados da classe Object.
CLS
A Common Language Specification é a parte da CTS responsável pela definição de como as linguagens .NET devem
ser interpretadas pelo compilador. Ela assegura a execução de todo o código gerado nas linguagens compatíveis
com a plataforma.
Como foi mostrado, há muito proveito em se desenvolver aplicações para um ambiente gerenciado, multi-linguagem
e multi-plataforma como o .NET.

A LINGUAGEM C#

C# (CSharp) é uma linguagem de programação orientada a objetos criada pela Microsoft, faz parte da sua plataforma
.Net. A companhia baseou C# na linguagem C++ e Java.

História
A linguagem C# foi criada junto com a arquitetura .NET. Embora existam várias outras linguagens que suportam essa
tecnologia (como VB.NET, C++, J#), C# é considerada a linguagem símbolo do .NET pelas seguintes razões:

* Foi criada praticamente do zero para funcionar na nova plataforma, sem preocupações de compatibilidade com
código de legado.
* O compilador C# foi o primeiro a ser desenvolvido.
* A maior parte das classes do .NET Framework foram desenvolvidas em C#.

A criação da linguagem, embora tenha sido feita por vários desenvolvedores, é atribuída principalmente a
Anders_Hejlsberg, hoje um Distinguished Engineer na Microsoft. Anders Hejlsberg era desenvolvedor de
compiladores na Borland, e entre suas criações mais conhecidas estão o Turbo Pascal e o Delphi.

3
Curso de programação em C# Mega News Informática - Módulo 1

OPERADORES EM C#

1) Operador de Atribuição – O símbolo igual (=) representa a atribuição de um valor à uma variável,
onde a variável e o valor atribuído devem obrigatoriamente ser de tipos compatíveis, ou seja, uma
variável do tipo int por exemplo não pode receber um valor do tipo string

2) Operadores Aritméticos – Os operadores aritméticos descritos na tabela abaixo são os mesmos


usados em cálculos matemáticos:

Operador Aritmético Descrição


+ Adição
- Subtração
* Multiplicação
/ Divisão
% Módulo (resto da divisão)

3) Operadores Aritméticos de Atribuição Reduzida – Esses operadores são usados para


compor uma operação aritmética e uma atribuição, conforme é descrito na tabela a seguir:

Operador Aritmético Descrição


+= mais igual
-= menos igual
*= vezes igual
/= dividido igual
%= módulo igual

4) Operadores Relacionais – Os operadores relacionais comparam dois valores e retornam um


valor booleano (true ou false). Veja na tabela abaixo esses operadores:

Operador Relacional Descrição


== Igual a
!= Diferente de
> Maior que
< Menor que
>= Maior do que ou igual a

4
Curso de programação em C# Mega News Informática - Módulo 1

<= Menor do que ou igual a

5) Operadores Lógicos – Os operadores lógicos trabalham como operandos booleanos e seu


resultado também será booleano (true ou false). Eles são usados somente em expressões
lógicas, e são descritos na tabela a seguir:

Operador Lógico Descrição


&& AND = E
|| OR = Ou
! NOT = Não

Assim, em um teste lógico usando o operador && (AND), o resultado somente será verdadeiro (true) se
todas as expressões lógicas forem avaliadas como verdadeiras.

Já, se o operador usado for o || (OR), basta que apenas uma das expressões lógicas seja verdadeira para
que o resultado também seja verdadeiro.

Completando, o operador lógico ! (NOT) é usado para gerar uma negação. Desta forma, é invertida toda a
lógica da expressão.

5
Curso de programação em C# Mega News Informática - Módulo 1

TIPOS DE DADOS EM C#
C# é uma linguagem fortemente tipada, portanto cada variável e objeto devem ter um tipo declarado. Pode ser
um tipo como, por exemplo, um char ou um int, ou um tipo definido pelo usuário como uma interface ou uma
classe.

Tipos de dados também podem ser definidos como sendo um:

 Tipos valor que armazenam valores


 Tipos de referência que armazenam referências para os dados reais.

Tipos Inteiros

A tabela a seguir mostra os tamanhos e intervalos dos tipos inteiros:

Tipos Ponto Flutuante ( Float )

A tabela a seguir mostra a precisão e o intervalo aproximado para os tipos de ponto flutuante:

Todos os tipos acima, na linguagem C# são aliases (apelidos) dos tipos sistema .NET Framework. Por exemplo,
int é um alias de System.Int32

Inicializando as variáveis
Variáveis locais em C# devem ser inicializadas antes de serem usadas. Portanto, se você declarar uma variável
local sem inicialização como abaixo:

Dará um erro conforme linha abaixo:

6
Curso de programação em C# Mega News Informática - Módulo 1

Você pode inicializá-la usando a instrução a seguir:

Neste caso estará sendo chamado o construtor padrão da classe Int32 que atribui um valor inicial para a
variável.

Obs: Construtor será abordado em detalhes mais a frente.

Tabela de valores padrão


A tabela a seguir mostra os valores padrão dos tipos valor retornado pelos construtores padrão, que vimos no
exemplo anterior:

Os construtores padrão são chamados usando o operador new da seguinte maneira:

A instrução anterior possui o mesmo efeito que a instrução a seguir:

Esta é a forma mais utilizada e lembre-se não é permitido usar variáveis não inicializadas em C#.

Tipo bool
7
Curso de programação em C# Mega News Informática - Módulo 1

A palavra-chave bool é um alias do System.Boolean. Ele é usado para declarar variáveis que armazenam os
valores booleanos, ou seja, true ou false:

Você também pode atribuir uma expressão avaliada como booleana a uma variável bool:

Obs: Em C++, um valor do tipo bool pode ser convertido em um valor do tipo int, em outras palavras, false é
equivalente a zero e true é equivalente a valores diferentes de zero. Já em C#, não existe conversão entre o
tipo bool e outros tipos.

Tipo Byte
A palavra-chave byte denota um tipo que armazena valores inteiros conforme indicado na tabela a seguir:

Você pode declarar e inicializar uma variável byte como neste exemplo:

Se o inteiro literal ultrapassa o intervalo de byte, ocorrerá um erro de compilação.

Tipo char
A palavra-chave char é usada para declarar um caractere Unicode

Constantes do tipo char podem ser gravadas como caracteres literais, sequência de escape hexadecimal, ou
representação Unicode. Você também pode converter os códigos para caracteres.

Veja exemplos abaixo:

Tipo decimal

8
Curso de programação em C# Mega News Informática - Módulo 1

A palavra-chave decimal denota um tipo de dados de 128 bits. Em comparação com o tipo ponto flutuante, o
tipo decimal tem uma precisão maior e um intervalo menor, que torna adequado para cálculos financeiros e
monetários.

Se você deseja um literal numérico real deve tratar como decimal, usando o sufixo m ou M, por exemplo:

Sem o sufixo m, o número é tratado como double (que é o padrão) gerando portanto um erro de compilação.

Os tipos integrais são implicitamente convertidos para decimal e o resultado é retornado como decimal.
Portanto, você pode inicializar uma variável decimal usando um literal Inteiro, sem o sufixo, da seguinte
maneira:

Não existe nenhuma conversão implícita entre tipos de ponto flutuante e o tipo decimal; portanto, um cast deve
ser usado para converter entre esses dois tipos:

Entendendo o tipo decimal do C#


O tipo decimal (um apelido para o tipo System.Decimal do .NET) é um tipo numérico com precisão de 128 bits,
o que o torna apropriado para cálculos enormes e de grande precisão, tais como cálculos financeiros.

A faixa aproximada deste tipo é: (mais ou menos)1.0 x 10e&#8722;28 até (mais ou menos)7.9 x 10e28 com
precisão de 28 ou 29 dígitos significantes. Em C# 2.0, o tipo decimal ocupa 12 bytes, como pode ser observado
no trecho de código abaixo:
Console.WriteLine("O tipo decimal ocupa " + sizeof(decimal) +
" bytes");
É preciso ter muito cuidado ao atribuir um literal de ponto-flutuante à uma variável do tipo decimal. Veja:
decimal valor = 34.50;
Este trecho de código não compila. Veja o erro reportado:
Literal of type double cannot be implicitly converted
to type 'decimal'; use an 'M' suffix to create a
literal of this type
Esta mensagem nos diz que não é possível converter implicitamente um tipo double para um tipo decimal. Para
solucionar isso, basta usar a letra "M" ou "m" após o valor literal. Veja:
decimal valor = 34.50m;
Para finalizar, se estivermos atribuindo um literal inteiro à uma variável do tipo decimal, o uso do "M" ou "m" é
dispensado. O trecho de código abaixo compila sem quaisquer problemas:
decimal valor = 34;

Tipo double
Palavra-chave double denota um tipo simples que armazena valores de ponto flutuante de 64 bits. Por padrão,
um literal numérico real no lado direito do operador de atribuição é tratada como double:

9
Curso de programação em C# Mega News Informática - Módulo 1

Tipo enum
Palavra-chave enum é usada para declarar uma enumeração, um tipo distinto, que consiste um conjunto de
constantes nomeadas. Cada tipo de enumeração tem um tipo base, que pode ser qualquer tipo integral exceto
char.

O tipo base padrão dos elementos de enumeração é int.

Exemplo:

Por padrão, o primeiro enumerador tem o valor 0, e o valor da cada enumerador sucessivo é aumentado em 1.
Por exemplo:

Nessa enumeração, Domingo é 0, Segunda é 1 e assim por diante.

Enumeradores podem ter inicializadores para substituir os valores padrão. Por exemplo:

Nessa enumeração, a sequência de elementos é forçada para iniciar a partir 1 ao invés do 0. Ou seja, nessa
enumeração, Domingo é 1, Segunda é 2 e assim por diante.

Tipo float
A palavra-chave float denota um tipo simples que armazena valores de ponto flutuante de 32 bits. Por padrão,
um literal numérico real no lado direito do operador de atribuição é tratada como double, portanto, para
inicializar uma variável FLOAT, use o sufixo f ou F, como por exemplo:

10
Curso de programação em C# Mega News Informática - Módulo 1

Se você não usar o sufixo na declaração anterior, você receberá um erro de compilação porque você está
tentando armazenar um double em uma variável tipo float.

Tipo int
A palavra-chave int denota um tipo inteiro que armazena valores de acordo com o tamanho e intervalo
mostrado na tabela de tipos inteiros. Você pode declarar e inicializar uma variável do tipo int como este
exemplo:

Tipo long
A palavra-chave long denota um tipo integral que armazena valores de acordo com o tamanho e intervalo
mostrado na tabela de tipos inteiros. Você pode declarar e inicializar uma long variável como este exemplo:

Tipo sbyte
A palavra-chave sbyte denota um tipo inteiro que armazena valores de acordo com o tamanho e intervalo
mostrado na tabela de tipos inteiros. Você pode declarar e inicializar uma sbyte variável como este exemplo:

Se o Inteiro literal excede o intervalo de sbyte, ocorrerá um erro de compilação.

Tipo short
Palavra-chave short denota um tipo inteiro de dados que armazena valores de acordo com o tamanho e
intervalo mostrado na tabela de tipos inteiros. Você pode declarar e inicializar uma short variável como este
exemplo:

Se o Inteiro literal não cabe em um short local de armazenamento, ocorrerá um erro de compilação.

Tipo uint

11
Curso de programação em C# Mega News Informática - Módulo 1

Palavra-chave uint denota um tipo inteiro que armazena valores de acordo com o tamanho e intervalo mostrado
na tabela de tipos inteiros. Você pode declarar e inicializar uma variável do tipo uint como este exemplo:

Tipo ulong
A palavra-chave ulong denota um tipo inteiro que armazena valores de acordo com o tamanho e intervalo
mostrado na tabela de tipos inteiros. Você pode declarar e inicializar uma ulong variável como este exemplo:

Tipo ushort
A palavra-chave ushort denota um tipo inteiro de dados que armazena valores de acordo com o tamanho e
intervalo mostrado na tabela a seguir. Você pode declarar e inicializar uma ushort variável como este exemplo:

Tipos por referência


Variáveis de tipos por referência (também chamado de objetos) armazenam referências para os dados reais.
Fazem parte deste grupo os seguintes tipos:

 Classe
 Interface
 Delegates
 Object
 String

Estes tipos serão vistos em detalhes mais a frente, ao longo do curso.

Formatação numérica
Você pode formatar resultados numéricos, usando o método String.Format:

A tabela a seguir contém as sequências com suporte formato padrão:

12
Curso de programação em C# Mega News Informática - Módulo 1

Boxing e Unboxing
Boxing e unboxing permitem que tipos por valor passem a serem tratados como objetos. Isso permite que o tipo
de valor possa ser armazenado na pilha de coletados pelo Garbage Collector.

Unboxing extrai o tipo de valor do objeto.

Neste exemplo, a variável i Inteiro é "Boxed" e atribuído ao objeto o:

O objeto o pode, então, ser "unboxed" e atribuído à variável i Inteiro:

Introdução à Strings no C#
Uma string (ou sequência de caracteres) é uma matriz de caracteres. Uma sequência de caracteres literal é
declarada usando aspas, como mostrado no exemplo a seguir:

Strings são imutáveis, significando que elas não podem ser alteradas uma vez que tenha sido criada. Métodos
que atuam em strings realmente retornam novas strings.

Manipulando Strings no C#
Introdução

13
Curso de programação em C# Mega News Informática - Módulo 1

O tipo string apesar de se comportar como um value type é na verdade um reference type. Apesar disso,
devemos considerar que estamos trabalhando com um value type quando estamos manipulando strings,
tendo em vista que este tipo de dado foi programado para funcionar como tal.

A classe string possui uma série de métodos estáticos e não estáticos, que são utilizamos para formatação,
concatenação, desmembramento, substring, etc. Vamos analisar alguns destes métodos da classe string.

O método Substring

O método substring é um método não estático que permite pegarmos uma porção de uma string. Para
utilizarmos o método substring, basta chamar o método a partir de uma variável string ou mesmo de uma
string literal, conforme o exemplo.
string nome = "Testando da Silva";
string sobreNome = nome.Substring(12, 5);

O método substring aceita como parâmetro a posição inicial que queremos obter e quantos caracteres devem
ser extraídos. Caso não seja informado o número de caracteres a ser extraído, a função retornará o restante
da string a partir da posição inicial informada.

O método IndexOf

O método IndexOf é utilizado para localizar uma determinada palavra dentro da string. Este método
retornará a posição da string desejada. Caso a string não seja encontrada, será retornado o valor -1.
string nome = "Testando da Silva";
int pos = nome.IndexOf("Silva");
//A partir do índice 5
int pos2 = nome.IndexOf("Silva", 5);

Conforme vimos no exemplo, é possível informar a posição inicial para busca como um parâmetro
adicional.

Funções ToUpper e ToLower

As funções ToUpper e ToLower permitem colocar uma string em letra minúsculas ou maiúsculas, conforme
o exemplo a seguir.
string nome = "Maurício";
nome = nome.ToUpper();
nome = nome.ToLower();

Funções StartsWith e EndsWith

As funções startswith e endswith verificam se a string começo ou termina com uma determinada palavra ou
caracter. Estas funções retornam um valor booleano (true ou false).
string arquivo = "comctl32.dll";

if (nome.StartsWith("com"))
Console.WriteLine("Começa com COM!");

if (nome.EndsWith(".dll"))

14
Curso de programação em C# Mega News Informática - Módulo 1

Console.WriteLine("É uma dll!");

Funções TrimStart, TrimEnd e Trim

As funções de Trim servem para remover espaços em branco das strings. A função TrimStart remove os
espaços em branco do início da string, já a função TrimEnd remove os espaços em branco do final da string.
A função Trim remove os espaços em branco do inicio e do fim da string.
string nome = " MAURICIO ";

nome = nome.TrimEnd();
nome = nome.TrimStart();

nome = nome.Trim();

Funções PadLeft e PadRight

As funções PadLeft e PadRight servem para preencher uma string a esquerda ou a direita com um caracter
especificado. Os exemplos a seguir mostra o uso das funções PadLeft e PadRight.
string nome = " MAURICIO ";

nome = nome.TrimEnd();
nome = nome.TrimStart();

nome = nome.Trim();

Funções String.Join e String.Split

A função Split serve para quebrar uma string em um array de strings de acordo com um separador. Ao
contrário da função split, a função Join concatena um array de string inserindo um separador.
string linha = "Teste, 10, 20, 10/06/2007";

string[] campos = linha.Split(',');


string linhaNova = String.Join(';', campos);

A Função String.Format

A função String.Format é uma das funções mais versáteis da classe string. Esta função permite a criação de
uma string baseada em um padrão. Podemos colocar dentro do padrão da string de formatação alguns tokens
que poderam ser substituídos por variáveis passadas por parâmetro no comando format.
string teste = String.Format("Vou colocar o {0} aqui.", "parâmetro");

No exemplo acima, o padrão da string (primeiro parâmetro) contém um token {0}. Este token indica que
este valor deve ser substituido pelo segundo parâmetro passado para a função (neste caso a palavra
“parâmetro”).
sTeste = String.Format("Formatação de string com {0} parâmetro. ",
"Agora são {1}. Valor numérico: {2}", 1, Now(), 15.5);

15
Curso de programação em C# Mega News Informática - Módulo 1

No exemplo acima, temos o padrão da string com mais de um token, com números de 0 à 2. A função
também recebe 3 parâmetros adicionais que correspondem aos valores que serão substituídos na string.
Além de informarmos os tokens, podemos informar regras de formatação que serão utilizadas de acordo com
o tipo de dado passado por parâmetro, conforme o exemplo,
sTeste = String.Format("Custom Format: {0:d/M/yyy HH:mm:ss}", dtHoje);
sTeste = String.Format("Formatação do número inteiro: {0:D}.", iNumero);
sTeste = String.Format("Formatação do número inteiro: {0:D4}.", iNumero);

A classe StringBuilder~

Apesar da versatilidade da classe string, operações com string podem consumir muitos recursos e causar
perda de desempenho. Isto ocorre porque a cada operação o framework cria um novo buffer para a string
resultante da operação, ao invés de aproveitar o buffer que está sendo utilizado. Isto é mais aparente em
operações de concatenação.

Para não criar este tipo de problema, podemos utilizar a classe StringBuilder, do namespace System.Text.
Esta classe permite a criação de strings aproveitando o buffer utilizado, o que torna o código mais eficiente.

No exemplo a seguir temos um trecho de código com uma operação feita de forma ineficiente e outra mais
eficiente usando o stringBuilder, veja a diferença.
// Codigo ineficiente
string sql;
sql = "SELECT * FROM Products";
sql += " WHERE CategoryId=1 AND";
sql += " AND UnitPrice>10";

// Codigo Eficiente
StringBuilder sb =
new StringBuilder();

sb.Append("SELECT * FROM Products");


sb.Append(" WHERE CategoryId=1 AND");
sb.Append(" AND UnitPrice>10");

sql = sb.ToString();

Usando a Classe StringBuilder


O Objeto String é imutável. Toda vez que você Usar um dos métodos na classe System.String, você cria um novo objeto de cadeia de
caracteres na memória, que Necessita de uma nova alocação de espaço para esse novo objeto. Em situações em que você precise realizar
modificações repetidas em uma sequência, a sobrecarga associada à criação um novo objeto String pode ser caro. A classe
System.Text.StringBuilder pode ser utilizada quando você desejar modificar uma sequência de caracteres sem criar um novo objeto. Por
exemplo, usando o StringBuilderclasse pode melhorar o desempenho ao concatenar várias cadeias de caracteres em conjunto em um
loop.

Instanciando um objeto StringBuilder

Você pode criar uma Nova instância de da StringBuilderclasse por inicializando a variável com um dos métodos construtor
sobrecarregado, conforme ilustrado no exemplo a seguir.

StringBuilder MyStringBuilder = new StringBuilder("Hello World!");

16
Curso de programação em C# Mega News Informática - Módulo 1

Definindo a Capacidade e Comprimento

Embora o seja um objeto dinâmico que lhe permite expandir o número de caracteres da cadeia de caracteres que ele
encapsula, você pode especificar um valor para o número máximo de caracteres que ele pode armazenar. Esse valor
é chamado a capacidade do objeto e não deve ser confundida com o comprimento da string que contém o atual . Por
exemplo, você pode criar uma nova instância da classe com a cadeia de caracteres "Hello", que tem um tamanho de
5, e você pode especificar que o objeto tem uma capacidade máxima de 25. Quando você modifica o , ele não
realoca o seu tamanho até que a capacidade seja atingida. Quando isso ocorre, o novo espaço é alocado
automaticamente e a capacidade é dobrada. Você pode especificar a capacidade da classe usando um dos
construtores sobrecarregados. O exemplo a seguir especifica que o objeto MyStringBuilder pode ser expandido para
um máximo de 25 espaços.

StringBuilder MyStringBuilder = new StringBuilder("Hello World!", 25);

Além disso, você pode usar a propriedade de leitura/escrita Capacity para definir o comprimento máximo de seu
objeto. O exemplo a seguir usa a propriedade Capacity para definir o comprimento máximo do objeto.

MyStringBuilder.Capacity = 25;

O método EnsureCapacity pode ser usado para verificar a capacidade do atual StringBuilder. Se a capacidade for
maior do que o valor passado, nenhuma alteração é feita; no entanto, se a capacidade for menor do que o valor
passado, a capacidade atual é alterada para coincidir com o valor passado.

A propriedade Length também pode ser exibida ou definida. Se você definir a propriedade Length para um valor que
é maior do que a propriedade Capacity, a propriedade Capacity é automaticamente alterada para o mesmo valor
que a propriedade Length. Configurar a propriedade Length com um valor que seja menor que o comprimento da
sequência de caracteres dentro do StringBuilder atual diminuirá a sequência de caracteres.

Modificando a Sequência de Caracteres do StringBuilder

A tabela a seguir lista os métodos que podem ser usados para modificar o conteúdo de um StringBuilder.

Nome do Método Uso

StringBuilder.Append Acrescenta informações ao final do StringBuilder atual.

StringBuilder.AppendFormat Substitui um especificador de formato passado em uma sequência de caracteres com texto formatado.

StringBuilder.Insert Insere uma string ou um objeto no índice especificado do StringBuilder atual.

StringBuilder.Remove Remove um número determinado de caracteres do StringBuilder atual.

StringBuilder.Replace Substitui um caractere especificado em um índice especificado.

17
Curso de programação em C# Mega News Informática - Módulo 1

Append

O método Append pode ser usado para adicionar texto ou uma representação da seqüência de caracteres de um objeto ao final de uma
seqüência de caracteres representada pelo StringBuilder atual. O exemplo a seguir inicializa um StringBuilder com "Hello World" e,
em seguida, acrescenta algum texto ao final do objeto. Espaço é alocado automaticamente conforme necessário.

StringBuilder MyStringBuilder = new StringBuilder("Hello World!");

MyStringBuilder.Append(" What a beautiful day.");

Console.WriteLine(MyStringBuilder);

AppendFormat

O método StringBuilder.AppendFormat adiciona o texto do participante do StringBuilderobjeto. Oferece suporte para o recurso
Formatando composto (para obter mais Informação, consulte Formatação Composta) chamando o IFormattableimplementação do
objeto ou objetos a ser formatado. Portanto, ele aceita as cadeias de caracteres de Formatar padrão para valores numéricos, data e hora e
enumeração, as cadeias de caracteres de Formatar Personalizada para numérico e valores de data e hora e as seqüências de caracteres de
Formatar definidas para tipos personalizados. (Para obter Informação sobre Formatando, consulte Tipos de Formatação.) Você pode
usar esse método para personalizar o Formatar das variáveis e acrescente a esses valores para um StringBuilder. O exemplo a seguir
utiliza o AppendFormatmétodo para colocar um valor Número um número inteiro é formatado sistema autônomo um valor de moeda
no participante de um StringBuilderobjeto.

int MyInt = 25;

StringBuilder MyStringBuilder = new StringBuilder("Your total is ");

MyStringBuilder.AppendFormat("{0:C} ", MyInt);

Console.WriteLine(MyStringBuilder);

// The example displays the following output:

// Your total is $25.00

Insert

O Método Insert adiciona uma sequência ou um objeto para uma posição específica na atual StringBuilderobjeto. O exemplo a seguir
usa esse método para inserir uma palavra na sexta posição de um objeto StringBuilder.

StringBuilder MyStringBuilder = new StringBuilder("Hello World!");

MyStringBuilder.Insert(6,"Beautiful ");

Console.WriteLine(MyStringBuilder);

// The example displays the following output:

// Hello Beautiful World!

18
Curso de programação em C# Mega News Informática - Módulo 1

Remove

Você pode usar o método Remove de para remover um número especificado de caracteres de atual StringBuilderobjeto, começando em
um índice baseado em zero especificado. O exemplo a seguir utiliza o método Remover de para diminuir um StringBuilderobjeto.

StringBuilder MyStringBuilder = new StringBuilder("Hello World!");

MyStringBuilder.Remove(5,7);

Console.WriteLine(MyStringBuilder);

// The example displays the following output:

// Hello

Replace

O método Replace do pode ser usado para substituir caracteres dentro de StringBuilderobjeto com outro caractere
especificado. O exemplo a seguir utiliza o método Substituir do para pesquisar um StringBuilderobjeto para todas as
instâncias do ponto de exclamação (!) de caracteres e substituí-los com o caractere de ponto de interrogação (?).

Caracteres de escape
Caractere de escape é um termo usado em computação para identificar um único caractere numa cadeia de
caracteres que altera o significado de seu sucessor. Uma sequência de escape é o subconjunto de caracteres
da cadeira de caracteres formado pelo caractere de escape e o caractere com o significado alterado. Em geral,
este caractere é a barra contrária (\).

Caracteres de escape, como " " (nova linha) e " " (tabulação) pode ser incluídas em sequências. Por exemplo:

Teremos como resultado:

19
Curso de programação em C# Mega News Informática - Módulo 1

Se você desejar incluir uma barra dentro da string, ele deve ser precedido com outra barra invertida. Como no
exemplo:

Resultado:

20
Curso de programação em C# Mega News Informática - Módulo 1

Lista dos caracteres de escape:


C# define os seguintes caracteres de escape

CARACTER CARACTERÍSTICA DO ESCAPE

\' Uma marca simples indica caractere literal

\" Marca dupla indica string literal

\\ Linha invertida

\0 Unicode caractere 0

\a Alerta (caractere 7)

\b Backspace (caractere 8) RETORNO

\f Form feed (caractere 12) ALIMENTA FORMULÁRIO

\n New line (caractere 10) NOVA LINHA

\r Carriage return (character 13) RETORNO DO CARRO

\t Horizontal tab (caractere 9) TABULAÇÃO HORIZONTAL

\v Vertical quote (caractere 11) MARCA VERTICAL

\uxxxx Unicode sequencia de escape para caracteres com valor expresso em hexadecimal

\xn[n][n][n] Unicode sequencia de escape para caracteres expresso em valor hexadecimal nnnn (versão do u\xxxx
comcomprimento variável)

\Uxxxxxxxx Unicode escape sequence for character with hex value xxxxxxxx (for generating surrogates)

\Uxxxxxxxx Unicode seqüência de caractere de escape expresso em hexadecimal (para geração de sub-título).

Destes, \a, \f, \v, \x e \U são usados raramente.

21
Curso de programação em C# Mega News Informática - Módulo 1

O símbolo @ ( Arroba )
O @ informa ao construtor da String para ignorar caracteres de escape e quebras de linha. Por exemplo:

Resultado:

Usando StringBuilder
A classe StringBuilder cria um buffer de sequência que oferece melhor desempenho se seu programa executa
uma grande quantidade de manipulação de strings. Ela também permite que você possa reatribuir caracteres
individuais, algo que o tipo string não oferece suporte. Por exemplo, o código abaixo, altera o conteúdo de uma
sequência sem criar uma nova sequência:

Matrizes

22
Curso de programação em C# Mega News Informática - Módulo 1

Uma matriz, também conhecida como array, é uma estrutura de dados que contém um número de variáveis do
mesmo tipo. As matrizes são declaradas com um tipo de dados, como o código abaixo:

Também é necessário definir o numero de elementos:

Neste caso definimos a matriz com 3 elementos. Essa matriz contém os elementos de i[0] à i[2]. Obviamente
poderíamos fazer estes 2 passos em uma única instrução:

Atribuindo valores para a matriz:

m[0] = 2;
m[1] = 4;
m[2] = 6;

Observe que o primeiro elemento é base zero. Também podemos declarar a matriz e inicializar seus valores em
uma única linha:

Para obter o valor de algum elemento:

Matrizes como objetos


No C#, matrizes são objetos, e não apenas regiões endereçáveis de memória contígua como em C e C++. O
que permite você de usar as propriedades, e outros membros da classe Array. Um exemplo disso é a
propriedade length para obter o comprimento de uma matriz:

A classe System.Array fornece vários outros métodos e propriedades para classificação, pesquisa, e copia de
matrizes. Por exemplo:

23
Curso de programação em C# Mega News Informática - Módulo 1

Neste caso estamos obtendo a posição do valor 10 dentro do array m. O resultado será 4. Caso não
encontrasse o valor seria -1.

Matrizes multidimensionais
Matrizes podem ter mais de uma dimensão. Por exemplo, a declaração a seguir cria uma matriz bidimensional
de quatro linhas e duas colunas:

Você pode inicializar a matriz na declaração conforme mostrado no exemplo o seguir:

Matrizes irregulares
Uma matriz irregular é uma matriz cujos elementos são matrizes. Os elementos de uma matriz irregular podem
ser de dimensões e tamanhos diferentes. Uma matriz irregular às vezes é chamada de uma "matriz de
matrizes".

A seguir há uma declaração de uma matriz dimensional única que tenha três elementos, cada um deles é uma
matriz dimensional única de inteiros:

Antes de usar mi, seus elementos devem ser inicializados. Você pode inicializar os elementos desta forma:

Cada um dos elementos é uma matriz dimensional única de inteiros. O primeiro elemento é uma matriz de 2
inteiros, o segundo é uma matriz de 4 inteiros, e o terceiro é uma matriz de 6 inteiros.

24
Curso de programação em C# Mega News Informática - Módulo 1

Também é possível usar inicializadores para preencher os elementos da matriz com valores, caso em que você
não precisa informar o tamanho de matriz. Por exemplo:

Você também pode inicializar a matriz na declaração da forma abaixo:

Observações sobre matrizes

Uma matriz irregular é uma matriz de matrizes, e, portanto seus elementos são tipos de referência e são
inicializados para null.

O método Length retorna o número de matrizes contidas na matriz irregular. Por exemplo, supondo que você
tenha declarado a matriz anterior, esta linha:

Retornará um valor de 3.

Para saber o tamanho de uma linha:

Retornará um valor de 2.

Matriz de 2 dimensões

Este exemplo cria uma matriz cujos elementos são matrizes. Cada um dos elementos de matriz tem um
tamanho diferente:

25
Curso de programação em C# Mega News Informática - Módulo 1

Exemplo em execução:

Usando foreach com matrizes

Esta instrução fornece uma maneira simples e limpa para percorrer os elementos de uma matriz. Por exemplo,
o código a seguir cria uma matriz chamada n e itera( Percorre ) através da instrução foreach:

26
Curso de programação em C# Mega News Informática - Módulo 1

Conversões implícitas permitidas

TIPO PODE SER CONVERTIDO PARA O(S) TIPOS(S)


bool object
byte Decimal, double, float, int, uint, long, ulong, object, short ou ushort
sbyte decimal, double, float, int, long, object ou short
char decimal, double, float, int, uint, long, ulong, object ou ushort
decimal object
double object
float double ou object
int decimal, double, float, long ou object
uint decimal, double, float, long, ulong ou object
long decimal, double, float ou object
ulong decimal, double, float ou object
short decimal, double, float, int, long ou object
ushort decimal, double, float, int, uint, long, ulong ou object

27
Introdução ao IDE Visual Studio
Vamos ver um pouco do ambiente de desenvolvimento integrado (IDE) do Visual Studio e seus recursos, que é
uma coleção de ferramentas de desenvolvimento expostas por meio de uma interface de usuário comum.
Quando estamos lidando com o Visual Studio, as ferramentas são compartilhadas com outras linguagens do
.NET Framework. Dentre todos os recursos, abaixo temos um resumo de alguns deles:

Editor de códigos

O Editor de códigos é onde escreveremos os códigos, e um dos seus recursos é os trechos de códigos, onde
existe um modelo de código, que pode ser preenchido, e aumenta a velocidade de entrada de código:

Estes trechos são armazenados como arquivos XML que podem ser facilmente editados e personalizados.

Refatoração

Ferramentas de refatoração podem automaticamente reestruturar seu código fonte, por exemplo, promovendo
as variáveis locais para parâmetros ou convertendo um bloco de código em um método:

Vamos falar um pouco de refactoring ou refatoração. Para começar o que é refatoração ? Vejamos o que diz a
Wikipédia:

Refatoração (do inglês Refactoring) é o processo de modificar um sistema de software para melhorar a estrutura
interna do código sem alterar seu comportamento externo.

O uso desta técnica aprimora a concepção (design) de um software e evita a deterioração tão comum durante o
ciclo de vida de um código. Esta deterioração é geralmente causada por mudanças com objetivos de curto prazo ou
por alterações realizadas sem a clara compreensão da concepção do sistema.

Outra consequência é a melhora no entendimento do código, o que facilita a manutenção e evita a inclusão de
bugs. Esta melhora no entendimento vem da constante alteração do código com objetivo de facilitar a
comunicação de motivações, intenções e objetivos por parte do programador
Pegando um gancho na definição acima podemos entender a refatoração como sendo o processo de
reestruturação de um sistema com o objetivo de simplificar, tornar mais legível e diminuir o custo de
manutenção do código sem alterar as funcionalidades do sistema.

Usando técnicas de refatoração você pode reestruturar partes do código do seu sistema alterando sua estrutura
interna sem mudar o seu comportamento externo.

Refatorar é melhorar a estrutura do código de um sistema preservando as suas funcionalidades. Os objetivos


básicos de efetuar uma refatoração seriam:

 Obter um código-fonte claro e de fácil manutenção;


 Reduzir a complexidade da aplicação;
 Remover redundâncias desnecessárias;
 Reutilizar código;
 Otimizar o desempenho do software.

Dentre os vários cenários passíveis de uma refatoração podemos citar:

 Alterar o nome de uma classe, função ou método : Permite a alteração do nome (identificador) de uma
classe, variavel, ou método. A alteração é propaganda por todo o código que realize alguma referência
ao identificador alterado.
 Extrair um método : Essa operação gera um novo método a partir do código previamente selecionado
pelo programador através do editor de código-fonte integrado ao ambiente de desenvolvimento.
 Alterar os parâmetros : Modifica os parâmetros de um método, refletindo a mudança em todos os código
que realizam chamada ao mesmo.
 Encapsular campos : Gera os métodos get e set para os atributos de uma classe, atualizando todas as
referências aos atributos em códigos associados.

Refatoração no Visual Studio


Para pode realizar a refatoração no Visual Basic 2005 deverá possuir o Visual Studio 2005 instalado e, além
disso, deverá efetuar o download do utilitário Refactor!, um produto da Developer Express, no site :
http://www.devexpress.com/Products/NET/IDETools/VBRefactor/.

O Refactor! é uma grátis mas não possui todas as funcionalidades habilitadas . Após efetuar o download e
instalar você pode registrar o produto no site da empresa e receber um bônus com algumas funcionalidades a
mais do que a versão padrão gratuita.

Após instalar o Refactor! e o bônus podemos realizar algumas operações de refatoração no ambiente do Visual
Studio usando o Visual Basic 2005.

O suporte a refatoração para os desenvolvedores VB.NET esta disponível através do menu de contexto
acionado pelo clique do botão direito do mouse sobre o código e a medida que você trabalhar com o código o
Refactor! esta trabalhando em segundo plano. O menu de contexto é alterado de forma dinâmica de forma e
exibir somente as ações de refatoração válidas para o código selecionado. Além disso a ferramenta oferece
dicas sobre a ação de refatoração selecionada.
As principais ações de refatoração para o Visual Studio usando o Refactor!

1- O método Extract

Uma das maneiras mais simples de refatorar um método muito grande é quebrá-lo em pequenos pedaços de
métodos menores. A ação de refatoração via método Extract é invocada através da seleção de uma região de
código que você deseja mover para fora do método original.

O trecho de código a seguir faz parte de uma pequena aplicação Visual Basic 2005:

Private Sub bt1_Click(ByVal sender As System.Object,


ByVal e As System.EventArgs) Handles bt1.Click

txt3.Text = calculo.calculaSoma(txt1.Text, txt2.Text)

Dim saida As String = Application.CompanyName

If saida = Nothing Then


saida = "Usando Refatoração"
End If

MessageBox.Show(saida)

End Sub

Podemos selecionar o trecho de código do bloco If/End If para realizar uma extração do código
para forma do método. Selecione o trecho de código, clique com o botão direito do mouse e o
menu de contexto irá surgir. Selecione a opção Refactor! e em seguida Extract Method.

O Refactor! irá exibir a dica referente a ação proposta com indicações de atuação no código.
Ao selecionar a opção - Extract Method - o Refactor! irá solicitar que você indique o local em
seu código onde você deseja inserir o novo método.

Após selecionar o local o novo método será inserido com um nome arbitrário que estará
destacado permitindo que você altere o nome sugerido.
Você pode usar este recurso para otimizar o seu código e torná-lo mais legível e mais simples de
manter.

2- Reordenando Parâmetros

Ás vezes é preciso reordenar os parâmetros de alguns métodos de suas classes. Para executar
esta refatoração usando o Refactor! escolha o método/rotina e a seguir o selecione um
parâmetro do método clicando com o botão direito do mouse após a seleção. Será apresentado
o menu de contexto, clique em Refactor! e selecione Reorder Parameters.

Será apresentada as opções de reordenamento , selecione a operação desejada e tecle ENTER


3- Renomeando métodos e variáveis

Para renomear um método usando o Refactor! selecione o método e acione o menu de contexto
com o botão direito do mouse. Serão apresentadas as opções, dentre elas Safe Rename;

A seguir selecione a opção Safe Raname. O Refactor! irá gerar um novo método com outro nome
tornando o método antigo obsoleto.

<Obsolete("Use Newmultiplica instead."),


EditorBrowsable(EditorBrowsableState.Never)> _

Public Shared Function multiplica(ByVal op2 As Double,


ByVal op1 As Double) As Double
Return Newmultiplica(op2, op1)
End Function

Public Shared Function Newmultiplica(ByVal op2 As Double,


ByVal op1 As Double) As Double
Return op1 * op2
End Function

Note que é exibida também a opção Symbolic Rename. Esta opção renomeia o método e
atualiza todas as referências feitas a ele no código.
Para renomear uma variável local basta selecioná-la. A refatoração Rename Local irá alterar o
nome da variável e atualizar todas as referências a ela no seu código.

Com estes exemplo procurei mostrar alguns dos recursos de refatoração que podem ser usados
no VB 2005 via utilitário Refactor! . O suporte a refatoração para o C# é nativo.

A versão Pro do Refactor! permite o acesso mais funcionalidades, mas isto é assunto para outro
artigo sobre refatoração.

O importante é você perceber que mesmo com estas limitações você pode ainda usá-la para
otimizar o seu código.

-------------------------------

Comentários XML

Comentário XML é a forma de adicionar uma documentação consistente ao seu código:


---------------------------------------------------

Janelas

Na figura abaixo estão as janelas mais importantes no Visual Studio 2010 Express:

Para visualizá-las, vá em View e selecione a janela desejada:


Abaixo temos descrições das janelas mais utilizadas ao longo do curso:

Solution Explorer

Utilize o Solution Explorer (Gerenciador de Soluções) para exibir e gerenciar arquivos de projeto e
configurações:

Toolbox

Utilize a Toolbox (Caixa de Ferramentas) para o desenvolvimento rápido de interfaces gráficas usando o mouse
para desenhar os vários objetos de um formulário:
Properties

Utilize a janela Properties (Janela de Propriedades), para configurar propriedades e eventos dos objetos da sua
interface de usuário:
Projeto no Visual Studio
Um projeto contém todos os arquivos necessários para seu aplicativo, incluindo não apenas arquivos de código
fonte, mas também arquivos de recursos como ícones, referências a arquivos externos que seu programa
depende.

Quando você cria um projeto, Visual Studio chama o compilador C# e outras ferramentas internas para criar um
conjunto executável usando os arquivos em seu projeto.

Observe a janela do Solution Explorer:

O nó Properties representa definições de configuração que se aplicam a seu projeto inteiro e são armazenados
no arquivo .csproj na sua pasta solução:

Essas configurações incluem opções de compilação, segurança, configurações de implantação e muito mais.

Designer de Projeto

Você faz modificações em seu projeto usando o Designer de Projeto, que é um conjunto de Páginas de
Propriedades que você acessa clicando com o botão direito do mouse sobre Properties, e selecionando Open:
Onde:

 Assembly name: Especifica o nome do arquivo de saída que manterá o manifesto do conjunto.
 Default namespace: Especifica o espaço para nome base para todos os arquivos no projeto.
 Output type: Especifica o tipo do aplicativo que será criado.
 Assembly Information: Através desta caixa de diálogo é possível especificar os valores dos atributos no
arquivo AssemblyInfo criado automaticamente com o projeto (veremos mais detalhes a seguir).
 Startup object: Define o ponto de entrada a ser chamado quando o aplicativo carregado; geralmente isso
é definido um para o formulário principal no seu aplicativo ou para o Sub Main procedimento que deve
executado quando o aplicativo for iniciado.
 Recursos: As opções a seguir permitem-lhe definir configurações gerais para o aplicativo:
Icon: Define o arquivo.icon que você deseja usar como o ícone do aplicativo.
Resource File: Para adicionar um arquivo de recurso do Win32 para o projeto.

Assembly Information

Através da caixa de diálogo Assembly Information podemos especificar os valores dos atributos no arquivo
AssemblyInfo (.exe ou .dll ) criado automaticamente com o projeto:
Onde:

 Title: Especifica um título para o manifesto do conjunto.

 Description: Especifica uma descrição opcional para o manifesto do conjunto.

 Company: Especifica um nome da empresa para o manifesto do conjunto.

 Product: Especifica um nome de produto para o manifesto do conjunto.

 Copyright: Especifica um aviso de copyright para o manifesto do conjunto.

 Trademark: Especifica uma marca para o manifesto do conjunto.

 Assembly Version: Especifica a versão do conjunto

 File Version: Especifica um número de versão que instrui o compilador para usar uma versão específica
para o recurso de versão de arquivo Win32.

 GUID: Um GUID exclusivo que identifica o conjunto. Quando você criar um projeto, Visual Studio gera uma
GUID para o conjunto.

 Neutral Language: Especifica qual cultura o oferece suporte do conjunto.

 Make assembly COM-Visible: Especifica se tipos no conjunto serão acessíveis para COM.

Estas informações ficam gravadas junto ao seu arquivo executável. Para visualizá-las, localize o teu arquivo
executável e clique com o botão direito do mouse:
E selecione a opção Propriedades:
Referências

No contexto de um projeto, uma referência simplesmente identifica um arquivo binário que seu aplicativo requer
para executar:

Normalmente, uma referência identifica um arquivo DLL como um dos arquivos de biblioteca de classe do .NET
Framework.

Se seu programa cria uma instância de uma classe que está definida em algum outro assembly, você deve
adicionar uma referência a esse arquivo em seu projeto antes de você compilar o projeto. Para adicionar uma
referência, clique em Add Reference no menu Project.

Todos os projetos C# por padrão incluem uma referência a mscorlib.dll, que contém as classes principais do
.NET Framework.

Formulários

Quando você cria um projeto Windows Forms, o Visual Studio adiciona um formulário no projeto por padrão e
chama-o Form1:
Os dois arquivos que representam o formulário são chamados Form1.cs e Form1.designer.cs.

Você escreve seu código no Form1.cs, o arquivo .designer.cs é onde o Windows Forms Designer escreve o
código que implementa todas as ações que você realizou arrastando e soltando controles da Toolbox, as
propriedades definas na janela Properties. Todos os formulários que você adicionar ao projeto tem estes dois
arquivos associados.

Você pode adicionar um novo formulário, clicando no item de menu Project, e selecionando Add Windows
Form.

Obs: você não deve editar o arquivo designer.cs manualmente.

Outros arquivos de código fonte

Um projeto pode incluir qualquer número de arquivos .cs adicionais que pode ou não estar associado a um
Windows Form específico:

Por enquanto só temos um arquivo de código no projeto, o Program.cs que contém o ponto de entrada para o
aplicativo.

Um único arquivo .cs pode conter qualquer número de definições de classe e estrutura.

Você pode adicionar arquivos novos ou existentes ou classes no seu projeto, clicando em Add New Item ou Add
Existing Item no menu Project.
Projetando uma interface de usuário
No Visual Studio, a maneira mais rápida e conveniente de criar sua interface de usuário (UI) é fazê-la
visualmente, usando o Windows Forms Designer e o Toolbox.

Há três etapas básicas para criar todas as interfaces de usuário:

 Adicionar controles ao formulário


 Definir propriedades iniciais para os controles
 Escrever manipuladores para eventos específicos (codificação)

Adicionando controles

No designer, você usa o mouse para arrastar, por exemplo, botões e caixas de texto, para uma superfície de
projeto que representa o formulário.

Vamos utilizar nosso formulário criado no ultimo exemplo.

A imagem abaixo mostra uma caixa de combinação que foi arrastado da janela Toolbox para um formulário no
Windows Forms Designer:

Enquanto você trabalha visualmente, o designer converte suas ações em código fonte C# e os grava em um
arquivo de projeto chamado .Designer.cs onde é o nome que você deu para o formulário.

Quando seu aplicativo é executado, esse código fonte irá posicionar e dimensionar os elementos de UI para
que elas apareçam da mesma maneira que na superfície de projeto.

Definindo Propriedades

Os valores que você especificar na janela Properties são simplesmente os valores iniciais que serão atribuídos
a essa propriedade quando o controle é criado em tempo de execução. Em muitos casos, esses valores podem
ser acessados ou alterados programaticamente em tempo de execução simplesmente obtendo ou definindo a
propriedade na instância da classe de controle em seu aplicativo.

No seu formulário, selecione o botão e observe a caixa de propriedades:


Use essa janela para exibir e alterar as propriedades em tempo de design e eventos dos objetos selecionados
que estão localizados em editores e designers.

Os principais elementos da janela Properties são:

Nome do objeto: Lista o objeto atualmente selecionado ou objetos:

Obs: Quando você seleciona vários objetos, somente propriedades comuns a todos os objetos selecionados
aparecem.

Categorias: Lista todas as propriedades e valores de propriedade para o objeto selecionado, por categoria:

Você pode recolher uma categoria para reduzir o número de propriedades visíveis. Ao você expandir ou
recolher uma categoria, você verá um sinal (+) ou menos (-) para a esquerda do nome da categoria Categorias
estão listadas em ordem alfabética.

Alfabética: Classifica todas as propriedades em tempo de design e eventos para objetos selecionados em
ordem alfabética:
Propriedades: Exibe as propriedades de um objeto:

Muitos objetos também ter eventos que podem ser exibidos usando a Properties janela.

Eventos: Exibe os eventos para um objeto:

Propriedade Pages: Exibe a Property Pages caixa de diálogo ou Project Designer para o item selecionado:

Páginas de propriedades exibe um subconjunto das propriedades disponíveis na janela Properties. Use este
botão para exibir e editar propriedades relacionadas à configuração ativa do seu projeto.

Configurando as propriedades do formulário

Basicamente vamos configurar as propriedades Name e Text dos vários controles e do formulário, para que ele
fique assim:

Altere a as propriedades como a seguir:

Form1

Name: frmCadastro
Text: Cadastro

Botão

Name: btnIncluir
Text: Incluir

label1

Name: lblEmpresa
Text: Empresa

textBox1
Name: txtEmpresa
Text: deixar em branco

Label2

Name: lblStatus
Text: Status:
Tratamento de eventos
Programas com interfaces gráficas são principalmente direcionadas a eventos. Ou seja, eles aguardam até que
um usuário faça algo (uma ação) como inserir texto em uma caixa de texto, clicar em um botão, ou alterar uma
seleção em uma caixa de listagem.

Quando isso acontece, o controle, que é apenas uma instância de uma classe do .NET Framework, envia um
evento para seu aplicativo.

Você pode optar por manipular um evento escrevendo um método especial em seu aplicativo que será
chamado quando o evento é recebido. Usando a janela Properties para especificar que eventos deseja tratar
em seu código.

Selecione o botão no designer e clique no botão Events, o ícone de um raio, na barra de ferramentas da janela
Properties para ver os seus eventos:

Observe que apesar de você ter alterado o nome do botão, ele continua associado ao button1_Click. Para
alterar este nome, basta, nesta janela apagar este nome e dar um clique duplo no lugar onde estava o
button1_Click conforme imagem abaixo:
Criando Eventos Customizados no C# (WindowsForms)

Introdução
Necessidade comum no desenvolvimento de soluções Windows Forms é a criação de eventos
personalizados. O desenvolvedor pode utilizar este recurso para gerenciar de forma mais eficiente o
fluxo de execução do seu programa. Com eventos, podemos manter o usuário informado sobre o
processamento executado pela aplicação e manter seu usuário informado é sem dúvida nenhuma uma
boa prática. Os formulários e controles possuem eventos built-in que atendem as necessidades mais
comuns das aplicações, contudo, a possibilidade de criarmos nossos próprios eventos nos permite
melhorar a qualidade do software produzido.

Estrutura do Exemplo
O exemplo apresentado neste artigo foi elaborado sobre a seguinte estrutura:
 Classe Base (frmBase.cs)
 Formulário de Produtos (frmProdutos.cs)
 Formulário MDI (mdiCadastro.cs)
A Classe Base implementa uma estrutura básica para operações CRUD. O aplicativo que consome esta
classe utiliza o modelo tradicional de Multiple Document Interface (MDI). Assim, o formulário MDI
implementado pela classe mdiCadastro.cs oferece as funcionalidades necessárias para manipular os
métodos e eventos dos formulários filhos. No exemplo, temos um formulário de Produtos cujo método
Salvar é invocado através da barra de ferramentas do formulário MDI. Implementamos um Evento
Customizado (AoSalvar) para exibir uma mensagem logo após o botão Salvar da barra de
ferramentas ser clicado pelo usuário.

Declarando Eventos e Atributos


A declaração de eventos é relativamente simples. Precisamos de um delegate
(AoSalvarEventHandler), a própria declaração do evento (AoSalvar) e um método de apoio
(RaiseAoSalvar) para disparar o evento quando desejado. O Quadro 1 apresenta o código necessário
para esta implementação. Observe que a Linha 03 implementa os atributos Categoria e Descrição
do evento customizado. Estas informações são apresentadas na Janela de Propriedades quando
exibimos os eventos do formulário (Figura 1).

01: public delegate void AoSalvarEventHandler(object sender, EventArgs e);


02:
03: [Category("Bartender - CustomEvents"), Description("Ocorre sempre ...")]
04: public event AoSalvarEventHandler AoSalvar;
05:
06: public virtual void RaiseAoSalvar()
07: {
08: AoSalvar(this, new EventArgs());
09: }
Quadro 1: Declarando Eventos e Atributos Customizados
Figura 1 : Atribudos dos Eventos Customizados

Consumindo Eventos
O aplicativo utilizado no exemplo, consome o evento AoSalvar sempre que o usuário clica no botão
Salvar da barra de ferramentas. O código deste botão é apresentado no Quadro 2, a linha em negrito
destaca o método RaiseAposSalvar que dispara o evento imediatamente após o método
SalvarRegistro ser executado. Neste fragmento de código, o objeto frmActiveChild corresponde ao
formulário de Produtos instanciado pelo MDI.

......
case "Salvar":
if (this.ActiveMdiChild != null)
{
try
{
if (frmActiveChild.ValidarFormulario())
{
frmActiveChild.Validate();
frmActiveChild.RaiseAoSalvar();
frmActiveChild.SalvarRegistro();
frmActiveChild.RaiseAposSalvar();
frmActiveChild.Status = frmBase.FormStatus.Ocioso;
AtualizarBarraFerramentas();
frmActiveChild.DesativarControles();
frmActiveChild.Refresh();
}
}
.....
Quadro 2: Fragmento de código disparando o evento AoSalvar

Já no formulário de Produtos. O tratamento do evento disparado é simples e funciona da mesma


forma como qualquer outro evento built-in. Você pode gerar o código para o EventHandler
simplesmente clicando sobre a linha deste evento na Janela de Propriedades. Veja o Quadro 3 com
o evento tratado.

private void frmProdutos_AoSalvar(object sender, EventArgs e)


{
MessageBox.Show("Disparado o evento AoSalvar!");
}
Quadro 3: Consumindo o Evento AoSalvar

Conclusão
Com este exemplo, você pode criar seus eventos personalizados e oferecer um feedback mais elegante
e eficiente para os usuários das suas aplicações Windows Forms. Existe ainda a possibilidade de
implementar eventos mais complexos incluindo informações peculiares ao evento customizado,
Criando uma Aplicação Console
Uma aplicação console é uma aplicação que roda através de uma linha de comando, no prompt do DOS,
vamos ao projeto.

1- Selecione no menu File a opção New Project e selecione o template Console Application:

Altere o nome do projeto (Name) para, por exemplo, AplicacaoConsole e clique em OK.

2 - A sua tela inicial deverá se parecer com esta:

3 - Adicione o seguinte código dentro do método Main:

O código completo ficará assim:


4 - Para executar clique CTRL + F5:

Agora vamos examinar as partes importantes deste programa:

No início do código temos algumas referencias a namespaces (será abordado mais a frente):
Editando código
O Editor de códigos do Visual C# é um processador de texto para escrever código fonte:

Recursos do Editor de Código

Assim como o Microsoft Word fornece suporte abrangente para frases, parágrafos, e gramática, o editor de
códigos C# faz o mesmo para sintaxe C# e para o .NET Framework.

Por exemplo, o IntelliSense, baseado na documentação, vai sugerido linhas códigos à medida que você digita
no editor:

Sublinhado Ondulado

Notificações visuais de palavras incorretas, erro de sintaxe e situações de aviso conforme você digita:
Finalizando nosso exercício

Vamos adicionar ao nosso procedimento a seguinte instrução:

Para executar o programa clique em CTRL + F5. Digite um nome na caixa de texto e clique no botão incluir:
Comentários em C#
A linha abaixo é um comentário:

Os caracteres // convertem o restante da linha em um comentário.

Você também pode comentar um bloco de texto, colocando-o entre os caracteres /* e */, por exemplo:
O método Main()
Todo programa em C# deve conter um método chamado Main, no qual o controle de execução inicia e termina.
É nele que criamos os objetos e executa outros métodos. É um método static (estático) que reside em uma
classe ou uma estrutura.

No exemplo anterior, ele reside em uma classe chamada Program.

Entrada e Saída
Programas console em C# geralmente usam os serviços de entrada / saída fornecidos pelas Bibliotecas do
.NET Framework

A instrução:

Usa o método WriteLine, um dos métodos de saída da classe Console.

Ele exibe no console o valor do seu parâmetro seguido por uma nova linha.

Uma aplicação console é uma aplicação que roda através de uma linha de comando, no prompt do DOS, e
atualmente este tipo de aplicação é muito pouco utilizado, normalmente se utiliza aplicações Windows ou Web,
por isto vamos voltar ao nosso exemplo anterior.
Aplicação Windows
Abra o nosso projeto MeuProjeto, em File > Open Projeto:

Instruções, expressões e operadores

O código C# de um aplicativo consiste de instruções abrangendo palavras-chave C#, expressões e operadores.

Visibilidade da variável

No C# uma instrução deve necessariamente ser criada dentro de um método, já uma declaração de variável,
pode ser feita dentro da classe:

Observe que no código acima a declaração da variável status foi feita dentro do bloco da classe, neste caso ela
recebe o nome de variável de classe ou variável global e fica visível para toda classe.
Já variáveis ou constantes declaradas em um bloco de código só estarão disponíveis para instruções dentro do
mesmo bloco de código:

Repare no exemplo acima, que o Visual C#, acusou erro na variável status, dentro do método incluir(), pois esta
variável foi criada no método btnIncluir_Click(), e está visível apenas no mesmo, neste caso ela recebe o nome
de variável local. A variável status declarada dentro do bloco do método, não existe fora deste bloco.
Instruções
Uma instrução pode declarar variável ou constante, uma chamada local um método, criar um objeto, ou atribuir
um valor a uma variável, propriedade ou campo, como no código abaixo:

Uma série de instruções delimitadas por chaves forma um bloco de código. O corpo de método é um exemplo
de um bloco de código.

Expressões

Uma expressão é um fragmento do código que pode ser avaliado como um único valor, objeto, método, ou
espaço para nome. Pode conter um valor literal, uma invocação do método, um operador e operandos, ou um
nome simples.

Nomes simples podem ser, por exemplo, o nome de uma variável, parâmetro, método, espaço para nome ou
tipo.

Exemplo:

Expressões podem usar operadores que por sua vez usam outras expressões como parâmetros ou chamadas
de método cujos parâmetros são por sua vez outras chamadas de método, portanto, expressões podem variar
de simples a muito complexo.

Os tipos mais simples de expressões são literais e nomes simples. Um literal é um valor constante que não tem
nome. No exemplo anterior 0 é um literal.

Especificamente, chamar um método é uma expressão de chamada método:

Uma invocação (chamada) do método requer o nome do método, como no exemplo acima, incluir().

Você também pode gostar