Você está na página 1de 18

C Sharp

Origem: Wikipdia, a enciclopdia livre.

C# (l-se "c xarpe"), uma linguagem de programao


interpretada, multi-paradigma, fortemente 'tipada', e, possuindo C#
paradigmas de programao imperativa, funcional, declarativa,
orientada a objetos e genrica, C# foi desenvolvida pela Paradigma Orientao a objetos
Microsoft como parte da plataforma .NET. A sua sintaxe estruturado
orientada a objetos foi baseada no C++ mas inclui muitas imperativoEventos
Funcional
influncias de outras linguagens de programao, como Object Genrica
Pascal e, principalmente, Java. O cdigo fonte compilado para Reflexo
Common Intermediate Language (CIL) que interpretado pela Concorrente
mquina virtual Common Language Runtime (CLR). C# uma Surgido em 2001
das linguagens projetadas para funcionar na Common Language ltima verso 6.0 (20 de julho de 2015)
Infrastructure da plataforma .NET Framework.
Criado por Microsoft
Estilo de esttica e dinmica, forte,
tipagem: segura e insegura, nominativa,
ndice parcialmente inferente
Compiladores .NET Framework, Mono,
1 Objetivos do projeto DotGNU, .Net Core
2 Histria Dialetos: C
2.1 Etimologia Influenciada Java,[1] C++, Eiffel, Modula-3,
2.2 Verses por
Object Pascal[2], Rust, F,
2.2.1 C# 2.0[9] Haskell
2.2.2 C# 3.0[10] Influenciou D, Fantom, Java 5,[3] Nemerle,
2.2.3 C# 4.0[11] Vala, Dart, Rust, F, Swift,
Hack
2.2.4 C# 5.0[12]
2.2.5 C# 6.0[13] Licena: MIT / CLR MIT

2.2.6 C# 7.0[14] Pgina oficial msdn.microsoft.com (http://ms


dn.microsoft.com/pt-br/vcshar
3 Caractersticas p/default.aspx)
3.1 Principais caractersticas do C#
3.2 Sintaxe
3.3 Orientao a objeto
3.4 Programao funcional
3.5 Tipos de dados
3.5.1 Tipos de valor
3.5.2 Tipos de referncia
3.5.3 Box e unboxing
3.5.4 Converses
3.5.5 Tempo de vida
3.5.6 Declarao implcita
3.6 Classes e Estruturas
3.6.1 Classes estticas
3.6.1.1 Classe Console
3.6.1.2 Classe Convert
3.6.1.3 Classe Math
3.7 Interface
3.8 Delegates
3.9 Enum
3.10 Mtodos
3.10.1 Mtodos de extenso
3.11 Passagem de parmetros
3.12 Propriedades
3.13 Namespace
3.14 Iterador
3.15 Principais comandos de controle
3.16 Exceptions Excees
3.17 Coleta de lixo e gerenciamento de memria
3.17.1 Ponteiros
3.18 Portabilidade
4 Escrevendo um programa
4.1 Exemplos de cdigo
4.2 Compilando o cdigo
5 Bibliotecas
5.1 Colees
6 Padronizao e licenciamento
7 Implementaes
8 Ver tambm
9 Referncias
10 Ligaes externas

Objetivos do projeto
A norma ECMA lista os objetivos de design para C#:[4]

A linguagem C# destina-se a ser um simples, moderna, de propsito geral, orientada a objetos.


A linguagem e suas implementaes devem fornecer suporte para princpios de engenharia de software,
tais como verificao de tipo forte, verificao de limites de array, deteco de tentativas de usar
variveis no inicializadas e coleta automtica de lixo. A robustez do software, a durabilidade e a
produtividade do programador so importantes.
A linguagem destina-se a ser utilizada no desenvolvimento de componentes de software adequados para
implantao em ambientes distribudos.
A portabilidade muito importante para o cdigo fonte, e programadores, especialmente aqueles j
familiarizados com C e C++.
O apoio internacionalizao muito importante.
C# deve ser adequada para escrever aplicaes tanto para sistemas hospedados e incorporados, que vo
desde o muito grande que usam sistemas operacionais sofisticados, at o muito pequeno com funes
dedicadas.
Embora aplicaes C# se destinam a ser econmicas no que diz respeito memria e requisitos de
energia de processamento, o idioma no foi concebido para competir diretamente no desempenho e
tamanho com C ou linguagem Assembly.

Histria
A linguagem C# faz parte do conjunto de ferramentas oferecidas na plataforma .NET e surge como uma
linguagem simples, robusta, orientada a objetos, fortemente tipada e altamente escalvel a fim de permitir que
uma mesma aplicao possa ser executada em diversos dispositivos de hardware, independentemente destes
serem PCs, handhelds ou qualquer outro dispositivo mvel.

O avano das ferramentas de programao e dos dispositivos eletrnicos inteligentes, criou problemas e novas
exigncias. As novas verses de componentes compartilhados eram incompatveis com o software antigo. Os
desenvolvedores reconheceram a necessidade de software que fosse acessvel para qualquer um e disponvel
por meio de praticamente qualquer tipo de dispositivo. Para tratar dessas necessidades, a Microsoft anunciou
sua iniciativa .NET e a linguagem de programao C#.[5]
Durante o desenvolvimento da plataforma .NET, as bibliotecas foram
escritas originalmente numa linguagem chamada Simple Managed C
(SMC), que tinha um compilador prprio. Mas, em Janeiro de 1999,
uma equipe de desenvolvimento foi formada por Anders Hejlsberg, que
fora escolhido pela Microsoft para desenvolver a linguagem. D-se
incio criao da linguagem chamada Cool. Um pouco mais tarde, em
2000, o projeto .NET era apresentado ao pblico na Professional
Developers Conference (PDC), e a linguagem Cool fora renomeada e
apresentada como C#.

A criao da linguagem, embora tenha sido feita por vrios


programadores, atribuda principalmente a Anders, hoje um
Distinguished Engineer na Microsoft. Ele fora o arquiteto de alguns
compiladores da Borland, e entre suas criaes mais conhecidas esto o
Turbo Pascal e o Delphi.

A Microsoft submeteu o C# ECMA para uma padronizao formal.


Em Dezembro de 2001 a associao liberou a especificao ECMA-334
Especificao da Linguagem C#. Em 2003 tornou-se um padro ISO
Anders Hejlsberg - criador do C#.
(ISO/IEC 23270). H algumas implementaes em desenvolvimento,
destacando-se a Mono, implementao open source da Novell, o
dotGNU e o Portable.NET, implementaes da Free Software Foundation, e o BDS 2008, implementao da
CodeGear.

Etimologia

Pensava-se que o nome "C#" viria duma sobreposio de quatro smbolos +, dando a
impresso de ++++, uma aluso continuao do C++. Entretanto, a cerquilha de "C#" se
refere ao sinal musical sustenido (, em ingls: sharp), que aumenta em meio tom uma nota
musical.[6]

Porm, devido a limitaes tcnicas (fontes padres, navegadores, etc) e o fato do smbolo A nota d
no estar presente nos teclados, o cerquilha (#) foi escolhido para ser usado no nome sustenido em
escrito.[7] Essa conveno refletida no ECMA-334 C# Language Specification, a clave de sol.

especificao tcnica da linguagem.[4] Entretanto, em determinados lugares, como em


propagandas e capas de livros, usado o smbolo de sustenido.[8]

Verses

C# 1.0

Alia o poder de C++ com a simplicidade do Visual Basic


Cdigo gerenciado com a noo de assemblies carregando o bytecode com segurana embutida e
controle de verses
Orientao a objeto
Tudo deriva de Object
Os tipos so Estruturas, Enumeraes, Classes, Interfaces, Delegados e Ponteiros (s em contexto unsafe)
Tipagem esttica
Eventos
Interoperabilidade com cdigo no gerenciado atravs de DLL nativa e componentes COM
Coletor de lixo de memria baseado em geraes
Compilador Just-in-time
Facilidades de integrao com ferramentas e IDE
Sintaxe para documentao
Sistema de exceo uniforme
Mecanismo de metadados
Extensiva biblioteca padro

C# 2.0[9]

Tipos e mtodos genricos


Tipos Parciais
Mtodos annimos
Iteradores
Tipos anulveis
Acessibilidade separada para Getter/setter
Converses de grupo de mtodos para delegados
Co e Contravarincia para delegados
Classes estticas
Inferncia de delegado

C# 3.0[10]

Variveis locais implicitamente tipadas


Inicializadores de objetos e colees
Propriedades auto-implementadas
Tipos annimos
Mtodos de extenso
Expresses de consulta
Expresses Lambda
rvores de expresso
Mtodos parciais

C# 4.0[11]

Vinculao dinmica
Argumentos nomeados e opcionais
Co e contravarincia genrica
Tipos embutidos de interoperabilidade ("NoPIA")[40]

C# 5.0[12]

Mtodos assncronos
Atributos de informao do chamador

C# 6.0[13]

Compilador como servio (Roslyn)


Importao de membros de tipos estticos no espao de nomes
Filtros de exceo
Await em blocos catch/finally
Inicializadores de propriedades automticas
Valores padres para propriedades apenas getter
Membros com copos como expresso
Propagador de Null (operador condicional de null, checagem de null sucinta)[43]
Interpolao de string
Operador nameof
Inicializador de dicionrio
C# 7.0[14]

Caractersticas em processo de desenvolvimento

Literais binrios
Separadores de dgitos
Funes locais
Switch para tipos
Retorno de referncias
Tuplas
Declarao Out (Out var ou Out "tipo")
Pattern Matching
Returno de async arbitrrio
Registros (Record)

Caractersticas
O C# uma linguagem de programao visual dirigida por eventos e totalmente orientada a objetos. Permite
um novo grau de intercmbio entre linguagens (componentes de software de diferentes linguagens podem
interagir). Os desenvolvedores podem empacotar at software antigo, para trabalhar com novos programas C#.
Alm disso, os aplicativos C# podem interagir pela Internet usando padres do setor, como SOAP (protocolo de
acesso a objetos simples) e XML (linguagem de marcao extensvel).

O C# tem razes em C, C++ e Java, adaptando os melhores recursos de cada linguagem e acrescentando novas
capacidades prprias. Ele fornece os recursos que so mais importantes para os programadores, como
programao orientada a objetos,strings, elementos grficos, componentes de interface com o usurio grfica
(GUI), tratamento de excees, mltiplas linhas de execuo, multimdia (udio, imagens, animao e vdeo),
processamento de arquivos, estruturas de dados pr-empacotadas, processamento de banco de dados, redes
cliente/servidor com base na Internet e na World Wide Web e computao distribuda.

Principais caractersticas do C#

Dentre as caractersticas essenciais do C# podemos citar:

Simplicidade: os projetistas de C# costumam dizer que essa linguagem to poderosa quanto o C++ e to
simples quanto o Visual Basic;
Completamente orientada a objetos: em C#, qualquer varivel tem de fazer parte de uma classe;
Fortemente tipada: isso ajudar a evitar erros por manipulao imprpria de tipos e atribuies
incorretas;
Gera cdigo gerenciado: assim como o ambiente .NET gerenciado, assim tambm o C#;
Tudo um objeto: System.Object a classe base de todo o sistema de tipos de C#;
Controle de verses: cada assembly gerado, seja como EXE ou DLL, tem informao sobre a verso do
cdigo, permitindo a coexistncia de dois assemblies homnimos, mas de verses diferentes no mesmo
ambiente;
Suporte a cdigo legado: o C# pode interagir com cdigo legado de objetos COM e DLLs escritas em
uma linguagem no-gerenciada;
Flexibilidade: se o desenvolvedor precisar usar ponteiros, o C# permite, mas ao custo de desenvolver
cdigo no-gerenciado, chamado unsafe;
Linguagem gerenciada: os programas desenvolvidos em C# executam num ambiente gerenciado, o que
significa que todo o gerenciamento de memria feito pelo runtime via o GC (Garbage Collector).[15]

Sintaxe

A sintaxe da linguagem C# semelhante de outras linguagens de estilo C, como C, C ++ e Java. Em


particular:
Os pontos e vrgulas so usados para denotar o fim de uma declarao.
As chaves so usadas para agrupar declaraes. As declaraes so geralmente agrupadas em mtodos
(funes), mtodos em classes, e classes em namespaces.
As variveis so atribudas usando um sinal de igual, mas comparadas usando dois sinais iguais
consecutivos.
Colchetes so usados com arrays, tanto para declar-los e para obter um valor em um determinado ndice
em um deles.
Possui uma forma limitada de diretivas de compilao.
Essencialmente imperativa, como todas linguagens mainstream.

Orientao a objeto

Um dos principais recursos da programao orientada a objetos a herana. Herana uma forma de
reutilizao de software em que as classes so criadas pela absoro dos dados e comportamentos de uma
classe j existente e aprimorando-as com novos recursos. Ao criar uma classe, em vez de escrever variveis de
instncia e mtodos complementares novos, o programador pode indicar que a nova classe deve herdar as
variveis de classe, propriedades e mtodos de outra classe. Uma classe derivada mais especfica do que sua
classe base e representa um grupo mais especializado de objetos. Normalmente, a classe derivada contm os
comportamentos de sua classe base e comportamentos adicionais. No caso de herana simples, uma classe
derivada de uma nica classe base. Ao contrrio do C++, o C# no suporta herana mltipla (que ocorre
quando uma classe derivada de mais de uma classe base direta).

Esta foi uma deciso de design do arquiteto principal da linguagem para evitar complicaes e simplificar os
requisitos arquitetnicos em toda a CLI. Ao implementar mltiplas interfaces que contm um mtodo com a
mesma assinatura, C# permite implementar cada mtodo dependendo da interface com a qual esse mtodo est
sendo chamado ou, permite implementar o mtodo uma vez e ter que ser uma invocao em uma chamada
atravs de qualquer uma das interfaces da classe.

A linguagem permite que se acesse um objeto como se ele fosse de outro tipo de acordo com o contrato, de
maneira polimrfica.

As classes podem ser abstratas e exigirem que sejam derivadas atravs da palavra-chave abstract. Nesse tipo
de classe mtodos no precisam ser obrigatoriamente implementados deixando para suas filhas implementar.

Existem algumas visibilidades possveis para determinar o encapsulamento:

public Os membros assim declarados podem ser acessado de qualquer local da aplicao
private Apenas os membros da classe atual podem acessar um membro declarado como privado
protected Somente pode ser acessado pela prpria classe e as derivadas dela
internal Qualquer classe dentro um mesmo assembly pode acessar esse membro

C# suporta sobrecarga de alguns operadores.

Programao funcional

Embora primariamente uma linguagem imperativa, at o C# 2.0 oferecia suporte limitado para programao
funcional atravs de funes de primeira classe e encerramentos sob a forma de delegados annimos. O suporte
foi expandido no C# 3.0 para programao funcional com a introduo de uma sintaxe leve para expresses
lambda, mtodos de extenso e uma sintaxe de compreenso de lista na forma de uma linguagem de
"compreenso de consulta". Em C# 7 mais um passo dado com novos conceitos, tais como: records, pattern
matching, tuplas, etc.

Tipos de dados
C# tem um sistema de tipo de dados unificado. Este sistema de tipo unificado chamado Common Type
System (CTS)[16].

Um sistema de tipo unificado implica que todos os tipos, incluindo primitivos, como inteiros, so subclasses da
classe System.Object. Por exemplo, cada tipo herda um mtodo ToString().

O CTS separa os tipos de dados em duas categorias:

Tipos de valor

As instncias de tipos de valores no tm identidade referencial nem semntica de comparao referencial -


comparaes de igualdade e desigualdade para tipos de valor comparam os valores de dados reais dentro das
instncias, a menos que os operadores correspondentes estejam sobrecarregados. Tipos de valor so derivados
de System.ValueType, sempre tm um valor padro e sempre podem ser criados e copiados. Algumas outras
limitaes em tipos de valor so que eles no podem derivar uns dos outros (mas podem implementar
interfaces) e no podem ter um construtor padro explcito (sem parmetros).

Os tipos de valor normalmente representam dados simples, como valores int ou bool. Os tipos de valor
prprios da linguagem so os tipos integrais, o tipo decimal e os tipos de ponto flutuante float (um nmero de
ponto flutuante IEEE de 32 bits) e double, e ainda char (uma unidade de cdigo Unicode de 16 bits) e
System.DateTime que dentifica um ponto especfico no tempo com nanossegundo de preciso). Outros
exemplos so enum (enumeraes) e struct (estruturas definidas pelo usurio).

Tipos de referncia

Em contraste, os tipos de referncia tm a noo de identidade referencial - cada instncia de um tipo de


referncia inerentemente distinta de todas as outras instncias, mesmo se os dados dentro de ambas as
instncias forem iguais. Isso refletido em comparaes de igualdade e desigualdade padro para tipos de
referncia, que testam a igualdade referencial em vez da estrutural, a menos que os operadores correspondentes
estejam sobrecarregados (como o caso para System.String). Em geral, nem sempre possvel criar uma
instncia de um tipo de referncia, nem copiar uma instncia existente ou executar uma comparao de valor
em duas instncias existentes, embora tipos de referncia especficos possam fornecer tais servios expondo um
construtor pblico ou implementando um Interface correspondente (como ICloneable ou IComparable).
Exemplos de tipos de referncia so objeto (a ltima classe base para todas as outras classes C #),
System.String (uma seqncia de caracteres Unicode) e System.Array (uma classe base para todos os arrays
C #).

Ambas as categorias de tipos so extensveis com tipos definidos pelo usurio.

Box e unboxing

Boxing a operao de converter um objeto de tipo de valor em um valor de um tipo de referncia


correspondente. Box em C# implcito.

Unboxing a operao de converter um valor de um tipo de referncia (previamente encaixotado) em um valor


de um tipo de valor. Unboxing em C # requer um cast de tipo explcito. Um objeto encapsulado de tipo T s
pode ser unboxed para um T (ou um T anulvel)[17].

Exemplo:

int foo = 42; // Value type.


object bar = foo; // foo is boxed to bar.
int foo2 = (int)bar; // Unboxed back to value type.
Converses

Existem dois tipos de converses no C#: implcita e explcita. C# mais segura do ponto de vista de tipos que
C++. Apenas converses seguras so feitas implicitamente. No h converso implcita de inteiro para
booleano, por exemplo.

Tempo de vida

Segundo seu escopo e disponibilidade, as variveis podem ser do tipo static (o valor fica disponvel para
todos os objetos da classe em que a varivel foi declarada), de instncia (criada na memria cada vez que
instanciamos um novo objeto).

Declarao implcita

C# permite declarar variveis locais estaticamente tipadas sem indicar seu tipo atravs da palavra-chave var.
Arrays so declarados implicitamente com new[]. Tambm possvel declara variveis diversas com tipagem
dinmica (no h verificao em tempo de compilao) com dynamic.

Classes e Estruturas

Em C#, a unidade de programao a classe (class). Os objetos so eventualmente instanciados (criados)


dessas classes, e as funes so encapsuladas dentro dos limites das classes como mtodos. Definies de
classe C# no necessitam de arquivos de cabealho ou arquivos separados (IDL, Definition Language). Em C#,
uma classe pode herdar de apenas um objeto pai (parent), mas uma classe pode implementar mltiplas
interfaces. Elas so tipos por referncia.

C# proporciona tambm um suporte a estruturas (struct). Esses so os tipo por valor.

Classes estticas

Alm das classes normais possvel criar classes estticas onde os mtodos no trabalham com instncias e se
assemelham com funes normais.

Classe Console

A classe Console, do namespace System, fornece suporte bsico para leitura e escrita de caracteres. Os
principais mtodos usados para essas funcionalidades so:

Write: escreve uma informao especfica em tela.


WriteLine: escreve uma informao especfica em tela e pula uma linha em seguida.
ReadLine: captura uma linha de texto digitada pelo usurio e retorna seu valor na forma de string.
ReadKey: captura um nico caractere digitado pelo usurio. O retorno desse mtodo um objeto da classe
ConsoleKeyInfo, que contm informaes sobre a tecla digitada pelo usurio.
Clear: esse mtodo limpa toda a tela do console. til para programas que exigem formatao dos
resultados.

Classe Convert

Muitas vezes precisamos converter o tipo para outro tipo. Neste caso, podemos usar a classe Convert, que
fornece diversos mtodos para converso entre os tipos bsicos de dados. Nem sempre possvel fazer a
converso e um erro gerado, por isso existem outros mtodos nos tipos que podem tratar a converso de
forma mais apropriada. Exemplo:
int num;
string texto = 2;
num = Convert .ToInt32 (texto);

Classe Math

Os mtodos da classe Math permitem que o programador efetue certos clculos matemticos comuns. Os
mtodos so chamados escrevendo-se o nome do mtodo, seguido de um parntese de abertura, do argumento
(ou uma lista de argumentos separados por vrgulas) do mtodo e um parntese de fechamento. Exemplo: para
calcular e imprimir a raiz quadrada de 900.0 podemos escrever:

Console .WriteLine (Math.Sqrt(900.0));

ou de forma compacta:

WriteLine (Sqrt(900.0));

Interface

Interfaces pertencem aos tipos de referncia, em que definem contratos que so implementados por uma classe
ou estrutura (que a utiliza para simular herana j que no oferece suporte para herdar outra estrutura). Uma
classe pode implementar mltiplas interfaces.[18][19]

Uma interface pode conter mtodos, propriedades, eventos e indexadores, mas no pode implementar seus
mtodos.

Principais Propriedades:

Uma interface quase como uma classe base abstrata. Qualquer classe ou estrutura que implementa a
interface deve implementar todos os seus membros;
Uma interface no pode ser instanciada diretamente. Seus membros so implementados por qualquer
classe ou estrutura que implementa a interface;
Interfaces podem conter eventos, indexadores, mtodos, propriedades;
As interfaces no contm qualquer implementao dos mtodos;
Uma classe ou estrutura pode implementar interfaces mltiplas. Uma classe pode herdar uma classe base
e tambm implementar uma ou mais interfaces.

interface ISampleInterface
{
void SampleMethod ();
}
class ImplementationClass : ISampleInterface
{
// implementao explcita do membro da interface:
void ISampleInterface .SampleMethod ()
{
// Implementao do Mtodo.
}
static void Main()
{
// Instncia da interface.
ISampleInterface obj = new ImplementationClass ();
// Chamada do membro.
obj.SampleMethod ();
}
}

Delegates
um elemento que permite que voc faa referncia a um mtodo. semelhante a um ponteiro de funo, mas
sua diferena se baseia em ser totalmente orientado a objetos encapsulando a instncia de mtodo ou objeto.[20]

O objeto de delegao pode ser passado para o cdigo que pode chamar o mtodo referenciado sem ter que
saber em tempo de compilao qual mtodo ser chamado. Usando delegates voc tem a flexibilidade para
implementar qualquer funcionalidade em tempo de execuo. A nica restrio que o mtodo seja compatvel
com o tipo de declarao do delegate, usando assim perfeitamente invocao annima. Delegates possuem a
seguintes propriedades:

So como ponteiros em C++, mas so do tipo seguro;


Permitem mtodos para serem passados por parmetros;
Podem ser usados para definir mtodos callback.[21]

Exemplo:

// Declare delegate -- defines required signature:


delegate double MathAction (double num);
class DelegateTest
{
// Regular method that matches signature:
static double Double (double input)
{
return input * 2;
}
static void Main()
{
// Instantiate delegate with named method:
MathAction ma = Double ;
// Invoke delegate ma:
double multByTwo = ma(4.5);
Console .WriteLine ("multByTwo: {0}" , multByTwo );
// Instantiate delegate with anonymous method:
MathAction ma2 = delegate (double input)
{
return input * input;
};

double square = ma2(5);


Console .WriteLine ("square: {0}" , square );
// Instantiate delegate with lambda expression

MathAction ma3 = s => s * s * s;

double cube = ma3(4.375);


Console .WriteLine ("cube: {0}" , cube);
}
}
// Output:
// multByTwo: 9
// square: 25
// cube: 83.740234375

Enum

Enum em C# usado para declarar uma enumerao, um tipo distinto que consiste em um conjunto de
constantes nomeados lista de enumerador.

Usados geralmente dentro de namespace para ser visvel para acesso das classes e usados dentro de classes e
structs, sendo considerados constantes numricas.

Enumeraes mantm seus membros em seu prprio escopo.

Por caracterstica comea com 0 mas pode ser inicializado com outro valor.
Se for atribudo a uma varivel, deve ser feita uma converso explcita do tipo enum para o tipo da varivel
tratada. Exemplo:

public class EnumTest2


{
enum Range : long { Max = 2147483648L , Min = 255L };
static void Main()
{
long x = (long)Range.Max;
long y = (long)Range.Min;
Console .WriteLine ("Max = {0}" , x);
Console .WriteLine ("Min = {0}" , y);
}
}
/* Sada:
Max = 2147483648
Min = 255
*/

Mtodos

Mtodo um membro de uma classe que permite implementar uma ao. Consiste de um cabealho (contm
um atributo, um modificador, um tipo de retorno, um nome do membro e uma lista formal de parmetros) e um
corpo (bloco de declaraes). O C# inclui 8 modificadores:[22]

O modificador new em um mtodo indica que o mtodo derivado planejado para esconder o
new
mtodo base
public usado para garantir que um mtodo acessado por todas as classes sem qualquer restrio
O modificador static indica que o mtodo pertence somente ao tipo static e no pode referir-se a
static
mtodos non-static ou variveis em uma classe
virtual usado quando a implementao de um mtodo pode ser mudada por classes derivadas
sealed Em um mtodo, previne uma classe derivada sobrescrever um mtodo
override usado para modificar um mtodo de uma classe base na classe derivada
abstract Em um mtodo, indica que o mtodo no contm implementao
extern Indica que o mtodo implementado externamente

O C# permite que vrios mtodos de mesmo nome sejam definidos na mesma classe, desde que esses mtodos
tenham diferentes conjuntos de parmetros (nmero, tipos ou ordem dos parmetros). Isso chamado
sobrecarga de mtodos. Quando um mtodo sobrecarregado chamado, o compilador C# seleciona o mtodo
correto examinando o nmero, os tipos e a ordem dos argumentos da chamada.

Mtodos de extenso

Mtodos de extenso em C # permitem que os programadores usem mtodos estticos como se fossem mtodos
da tabela de mtodos de uma classe, permitindo que adicionem mtodos a um objeto que eles acham que
deveria existir nesse tipo e suas derivadas.

Passagem de parmetr os

Os tipos de parmetros so quatro:

valor: corresponde a uma varivel local que recebe seu valor inicial do argumento fornecido quando um
mtodo chamado. Isto acontece porque um parmetro de valor declarado em um mtodo refere-se
localizao da memria diferente daquela do argumento chamado em um mtodo.
referncia: um parmetro declarado com o modificador ref chamado de parmetro de referncia.
Diferente do parmetro de valor, o parmetro de referncia no cria uma nova localizao na memria.
Refere-se mesma localizao de memria do argumento chamado em um mtodo.
sada: um parmetro declarado com o modificador out um parmetro de sada. Parmetros de sada so
usados em mtodos que retornam vrios valores. Refere-se mesma localizao de memria do
argumento chamado em um mtodo. necessrio atribuir um parmetro de sada antes do mtodo
retornar um valor. Em C# 7 menos incentivado por causa do advento das tuplas. Mas para cdigo
legado possvel declarar a varivel junto ao argumento.
nmero varivel de argumentos: um parmetro params pode ser um array de nica dimenso que recebe
vrios argumentos.

Propriedades

Uma propriedade o atributo de uma classe (o tamanho de uma string, por exemplo). Propriedades no
denotam localizaes de armazenamento mas contm declaraes executveis que so usadas para ler ou
escrever o valor da propriedade. As propriedades podem ser dos tipos:

esttica: usamos o modificador static. No podemos nos referir a uma propriedade static usando
this. Usamos apenas seu nome.
instncia: acessam um campo da instncia.
padro: a propriedade que usada sem um nome, funciona como um ndice

Os acessores das propriedades so declaraes executveis que leem ou escrevem o valor de uma propriedade.
So eles o get ( um mtodo sem nenhum parmetro que retorna o valor da propriedade) e set (mtodo que
atribui o valor em uma propriedade). A propriedade apenas um acar sinttico para esse par de mtodos.

Namespace

A palavra-chave de namespace usada para declarar um escopo que contm um conjunto de objetos
relacionados. Voc pode usar um namespace para organizar elementos de cdigo e para criar globalmente tipos
exclusivos.[23][24][25][26][27]

Namespaces possuem as principais propriedades:

Usados para organizar cdigos de grandes projetos;


A diretiva using evita a necessidade de especificar o nome para cada classe;
H sempre um namespace global que faz referncia ao namespace System do .NET framework.

Iterador

Iteradores so utilizados para percorrer uma coleo de dados como uma lista.

O mtodo iterator um get personalizado para colees, em C# usa-se a declarao de produzir retorno de um
elemento de cada vez, como o operador yield return recordando o local atual do cdigo e retornando a
executar no mesmo local para a prxima iterao.

Por meio do foreach um iterator pode retornar mais de um valor at o fim do bloco ou quando o comando
yield break for encontrado. Seus tipos de retorno mais usados so: IEnumerable, IEnumerable<T>,
IEnumerator ou IEnumerator<T>.

Exemplo:

static void Main()


{
foreach (int number in SomeNumbers ())
{
Console .Write(number .ToString () + " ");
}
// Sada: 3 5 8
Console .ReadKey ();
}
public static System .Collections .IEnumerable SomeNumbers ()
{
yield return 3;
yield return 5;
yield return 8;
}

Principais comandos de contr ole

if : executa um bloco de cdigo com base no valor de uma expresso booleana;


goto : transfere o controle para uma estrutura de comandos que identificada por um rtulo;
while : executa condicionalmente o cdigo dentro do bloco while zero ou mais vezes;
do...while : executa condicionalmente o cdigo dentro do do uma ou mais vezes;
for : seu uso recomendado quando sabemos a quantidade de repeties que devemos mostrar no
console;
foreach : percorre cada um dos elementos de um array (ou qualquer classe que implementa
IEnumerable);
switch : executa o bloco de cdigo que associado com o valor da expresso de controle.

Exceptions Excees

Excees em C# fornecem uma maneira estruturada, uniforme e segura de manipulao, tanto em nvel de
sistema e erros condicionais de aplicao. Exceptions em C# so similares a excees em C++, mas com
algumas importantes diferenas:

Em C#, todas as exceptions representam um instncia de classe derivada de System.Exception. Em


C++, qualquer valor de qualquer tipo pode ser usado para representar uma exceo.
Em C# o Bloco finally pode ser escrito ao final do cdigo para executar em ambas as situaes de
exceo ou execuo normal. Em C++ difcil escrever sem duplicar cdigos.

Excees possuem as principais propriedades:

Um bloco try em torno de uma instruo pode lanar excees;


Aps a execuo do bloco try, o fluxo de controle vai para o primeiro manipulador de exceo associado
que est presente em qualquer lugar na pilha de chamadas. O catch usado para definir o manipulador
de exceo;
Se nenhum manipulador de exceo para uma determinada exceo estiver presente, o programa
apresenta erro.

Excees podem ser explicitamente geradas por um programa usando a palavra-chave throw.

Exemplo:

static void TestCatch2 ()


{
System .IO.StreamWritersw = null;
try
{
sw = newSystem .IO.StreamWriter (@"C:\test\test.txt" );
sw.WriteLine ("Hello" );
}
catch (System .IO.FileNotFoundException ex)
{
// Put the more specific exception first.
System .Console .WriteLine (ex.ToString ());
}
catch (System .IO.IOException ex)
{
// Put the less specific exception last.
System .Console .WriteLine (ex.ToString ());
}
finally
{
sw.Close();
}
System .Console .WriteLine ("Done" );
}

Coleta de lixo e ger enciamento de memria

O operador new aloca memria para o objeto e, ento, chama o construtor desse objeto. Ao contrrio do C e do
C++, em que os programadores devem gerenciar a memria de maneira explcita, o C# realiza o gerenciamento
de memria internamente. A plataforma .NET realiza a coleta de lixo da memria para retornar a memria do
sistema que no mais necessria. Quando o coletor de lixo executa, ele localiza os objetos para os quais o
aplicativo no tem referncias. Tais objetos podem ser coletados nesse momento ou durante uma execuo
subsequente do coletor de lixo.

A alocao e liberao de recursos, como conexes de rede, conexes de banco de dados e arquivos, devem ser
manipuladas explicitamente pelo programador. Uma tcnica empregada em conjunto com o coletor de lixo
definir um finalizador. Com a sintaxe da declarao (no confundir com a diretiva) using

Ponteiros

Em C#, os ponteiros de endereo de memria s podem ser usados dentro de blocos especificamente marcados
como unsafe e programas com cdigo inseguro precisam de permisses apropriadas para serem executados. A
maior parte do acesso a objetos feita atravs de referncias de objeto seguras, que sempre apontam para um
objeto "vivo" ou tm o valor nulo bem definido; impossvel obter uma referncia a um objeto "morto" (um
que foi coleta de lixo), ou a um bloco de memria aleatria. Um ponteiro inseguro pode apontar para uma
instncia de um tipo de valor, matriz, sequncia de caracteres ou um bloco de memria alocada em uma pilha.
Cdigo que no est marcado como inseguro ainda pode armazenar e manipular ponteiros atravs do tipo
System.IntPtr, mas no pode desreferenci-los.

Portabilidade

Por design, C# a linguagem de programao que reflete mais diretamente a infraestrutura de linguagem
comum (CLI)[28]. A maioria dos seus tipos intrnsecos corresponde a tipos de valor implementados pelo
framework CLI. No entanto, a especificao de linguagem no indica os requisitos de gerao de cdigo do
compilador: ou seja, no indica que um compilador C# deve segmentar um Common Language Runtime, ou
gerar Common Intermediate Language (CIL) ou gerar qualquer outro formato especfico. Teoricamente, um
compilador C# poderia gerar cdigo de mquina como compiladores tradicionais de C++, Pascal ou Fortran. De
fato h iniciativas para que isso se torne realidade[29].

Escrevendo um programa
Um programa em C# contm 4 elementos principais:

uma declarao de namespace: contm as bibliotecas de classe que voc pode usar em um programa. A
diretiva using System especifica que o programa pode utilizar a biblioteca no namespace System.
uma classe: contm as declaraes de dados e mtodos para uma aplicao;
um mtodo Main: semelhante ao C++ e Java, todos os programas C# comeam executando o mtodo
Main;
e uma declarao do programa.

Exemplos de cdigo

Segue, abaixo, o programa teste Ol Mundo, que exibe a frase "Ol, Mundo!":
using System ;

namespace Teste
{
class OlaMundo
{
static void Main()
{
Console .WriteLine ("Ol, Mundo!" );
}
}
}

Ou em sua forma compacta:

class OlaMundo { static Main() => System .Console .Write("Ol, Mundo!" ); }

Compilando o cdigo

As aplicaes desenvolvidas em C# so baseadas em arquivos (com extenso .cs) contendo o cdigo-fonte dos
programas. Quando voc compila seu cdigo, cria um assembly. Um assembly uma coleo de arquivos que
aparecem ao programador como uma nica DLL, biblioteca de link dinmico (Dynamic Link Library), ou
executvel (EXE). Em .NET, um assembly a unidade bsica de reutilizao, versionamento, segurana e
implantao. O CLR proporciona um nmero de classes para manipulao de assemblies.

Bibliotecas
Ao contrrio das outras linguagens de programao,
nenhuma implementao de C# atualmente inclui qualquer
conjunto de bibliotecas de classes ou funes. Mesmo
assim, esta linguagem est muito vinculada plataforma
.NET, da qual obtm as suas classes ou funes de
execuo. O cdigo organizado num conjunto de espaos
de nomes que agrupam as classes com funes
semelhantes. Por exemplo, System.Windows.Forms contm
o sistema Windows Forms; System.Console usado para
entrada/sada de dados.

Um nvel de organizao superior fornecido pelo conceito


de montador, que pode ser um simples arquivo ou mltiplos Captura de tela do Banshee, um media player
arquivos ligados juntos que podem conter muitos espaos desenvolvido em C#
de nomes ou objetos. Programas que precisam de classes
para realizar uma funo em particular podem se
referenciar aos montadores como System.Drawing.dll e System.Windows.Forms.dll assim como a
biblioteca core (conhecida como mscorlib.dll na implementao da Microsoft).

Colees

Colees so grupos de objetos de tipos semelhantes. O gerenciamento da quantidade de objetos que as


compem feito internamente nas colees; por sua vez, quando usamos um array o seu tamanho precisa ser
gerenciado pelo programador. No namespace Collections.Generic (no use o System.Collectios,
obsoleto), encontramos uma srie de colees predefinidas a partir das quais podemos criar nossas prprias
colees. Alm disso, neste namespace podemos encontrar a implementao de estruturas de dados como
pilhas, listas, listas ordenadas, filas, e todas so implementadas usando colees. Algumas classes membros:

List: usa um array cujo tamanho incrementado dinamicamente conforme necessrio;


CollectionBase: usada como classe para implementar colees fortemente tipadas;
Queue: coleo de objetos que implementa uma fila do tipo primeiro a entrar, primeiro a sair;
SortedList: coleo que implementa uma lista ordenada;
Stack: coleo de objetos que implementa uma pilha (ltimo a entrar, primeiro a sair);
Dictionary: coleo com chave e valor sem ordem ou classificao.

Padronizao e licenciamento
Em agosto de 2001, a Microsoft Corporation, a Hewlett-Packard e a Intel Corporation copatrocinaram o envio
de especificaes para o C#, bem como a Common Language Infrastructure (CLI) para a organizao de
padres Ecma International. Em dezembro de 2001, a ECMA lanou ECMA-334 C# Language Specification.
C# tornou-se um padro ISO em 2003 (ISO/IEC 23270:2003 - Information technology Programming
languages C#). A ECMA j havia adotado especificaes equivalentes como a 2 edio do C#, em
dezembro de 2002.

Em junho de 2005, a ECMA aprovou a edio 3 da especificao C# e atualizou o ECMA-334. As adies


incluram classes parciais, mtodos annimos, tipos anulveis e genricos (algo semelhante aos modelos C++).

Em julho de 2005, a ECMA submeteu ao ISO/IEC JTC 1, atravs do processo Fast-Track, os padres e TRs
relacionados. Este processo geralmente leva 6-9 meses.

A definio de linguagem C# e o CLI so padronizados sob os padres ISO e ECMA que fornecem proteo de
licenciamento razovel e no-discriminatria de reivindicaes de patentes.

Implementaes
O compilador de referncia C# Microsoft Visual C#, que de cdigo aberto[30].

A Microsoft est liderando o desenvolvimento de um novo compilador open-source C# e um conjunto de


ferramentas, anteriormente codinome "Roslyn". O compilador, que inteiramente escrito em cdigo gerenciado
(C#), foi aberto e funcionalidade surgiu como APIs. Isso permite aos desenvolvedores criar ferramentas de
refatorao e diagnstico.

Tambm h o desenvolvimento do .Net Core que um projeto aberto e multiplataforma.

Existem outros compiladores C#, incluindo uma implementao da Common Language Infrastructure e as
bibliotecas de classe .NET at .NET 2.0:

O projeto Mono fornece um compilador C# de cdigo aberto, uma implementao completa de cdigo
aberto da Common Language Infrastructure, incluindo as bibliotecas de estruturas necessrias, conforme
elas aparecem na especificao ECMA, e uma implementao quase completa das bibliotecas de classe
.NET proprietrias da Microsoft at .NET 3.5. A partir do Mono 2.6, no existem planos para
implementar o WPF; A WF est planejada para uma verso posterior; E h apenas implementaes
parciais do LINQ to SQL e WCF.
O projeto DotGNU (agora descontinuado) tambm forneceu um compilador C# de cdigo aberto, uma
implementao quase completa da Common Language Infrastructure, incluindo as bibliotecas de
estruturas necessrias conforme elas aparecem na especificao ECMA e um subconjunto de algumas
classes proprietrias do .NET da Microsoft at .NET 2.0 (aquelas no documentadas ou includas na
especificao ECMA, mas includas na distribuio padro do Microsoft .NET Framework).
O projeto Rotor da Microsoft (atualmente chamado Shared Source Common Language Infrastructure)
(licenciado somente para uso educacional e de pesquisa) fornece uma implementao de origem
compartilhada do CLR runtime e um compilador C # e um subconjunto das bibliotecas de estrutura
Common Language Infrastructure requeridas na especificao ECMA (At C# 2.0, e suportado apenas no
Windows XP).
Ver tambm
ASP.NET
Common Language Runtime
Microsoft .NET
Microsoft XNA
Mono (projeto)
Visual Studio

Referncias
anguage%20Feature%20Status.md). GitHub.
1. Why Microsoft's C# isn't(http://news.cnet.com/2008 Consultado em 26 de novembro de 2016
-1082-817522.html)(em ingls). Consultado em 26 de 15. "C# e .NET - Guia do Desenvolvedor", Edwin Lima,
agosto de 2010 Eugnio Reis, Rio de Janeiro: Campus, 2002
2. The A-Z of Programming Languages: C#(http://ww 16. Book sources (https://en.wikipedia.org/wiki/Special:
w.computerworld.com.au/article/261958/a-z_program BookSources/0-7356-1288-9). Wikipedia (em ingls)
ming_languages_c_/?pp=7)(em ingls). Consultado 17. Tipo de dado (https://pt.wikipedia.org/w/index.php?t
em 26 de agosto de 2010 itle=Tipo_de_dado&oldid=46462373). Wikipdia, a
3. Java 5 catches up with C#(http://www.barrycorneliu enciclopdia livre. 16 de agosto de 2016
s.com/papers/java5/onefile/)(em ingls). Consultado 18. http://www.microsoft.com/downloads/details.aspx?
em 26 de agosto de 2010 displaylang=en&FamilyID=dfbf523c-f98c-4804-afbd-
4. C# Language Specification(http://www.ecma-intern 459e846b268e CSharp Language Specification C# 3.0
ational.org/publications/files/ECMA-ST/Ecma-334.pd (em ingls) Pgina visitada em 29 de Maro de 2013
f) (PDF) (em ingls). Consultado em 24 de agosto de 19. http://msdn.microsoft.com/pt-
2011 br/library/vstudio/ms228593CSharp Language
5. "C# - Como Programar", H. M. Deitel, So Paulo: Specification C# 5.0 (em ingls) Pgina visitada em 30
Pearson Education, 2003 de Maro de 2013
6. C#/.NET History Lesson(http://www.jameskovacs.c 20. http://msdn.microsoft.com/pt-
om/blog/CNETHistoryLesson.aspx)(em ingls). br/library/vstudio/618ayhy6Referncia de C# Pgina
Consultado em 24 de agosto de 2011 visitada em 30 de Maro de 2013
7. Microsoft C# FAQ (http://msdn.microsoft.com/vcsh 21. http://msdn.microsoft.com/pt-
arp/previous/2002/FAQ/default.aspx) (em ingls). br/library/vstudio/900fyy8e.aspx30/03/13
Consultado em 24 de agosto de 2011 22. Curso online Bradesco - C#,
8. Visual C#.net Standard(http://www.microsoft.com/p http://www.ev.org.br/Paginas/Home.aspx, pgina
resspass/images/gallery/boxshots/web/visual-c-sharp0 visitada em 30/03/13
3.jpg) (em ingls). Consultado em 24 de agosto de 23. http://msdn.microsoft.com/pt-
2011 br/library/vstudio/67ef8sbdPgina visitada em 30 de
9. What's New in the C# 2.0 Language and Compiler Maro de 2013
(https://msdn.microsoft.com/en-us/library/7cz8t42e(v= 24. http://download.microsoft.com/download/a/9/e/a9e229b9-
vs.80).aspx). msdn.microsoft.com. Consultado em 26 fee5-4c3e-8476-
de novembro de 2016 917dee385062/CSharp%20Language%20Specification%20v
10. Overview of C# 3.0(https://msdn.microsoft.com/en- CSharp Language Specification C# 1.0 (em ingls)
us/library/bb308966.aspx). msdn.microsoft.com. Pgina visitada em 29 de Maro de 2013
Consultado em 26 de novembro de 2016 25. http://download.microsoft.com/download/5/e/5/5e58be0a-
11. C# 4.0 - New C# Features in the .NET Framework 4 b02b-41ac-a4a3-
(https://msdn.microsoft.com/en-us/magazine/f f796223. 7a22286214ff/csharp%20language%20specification%20v1.2
aspx). msdn.microsoft.com. Consultado em 26 de CSharp Language Specification C# 1.2 (em ingls)
novembro de 2016 Pgina visitada em 30 de Maro de 2013
12. An Introduction to New Features in C# 5.0(https://b 26. http://download.microsoft.com/download/9/8/f/98fdf0c7-
logs.msdn.microsoft.com/mvpawardprogram/2012/03/ 2bbd-40d3-9fd1-
26/an-introduction-to-new-features-in-c-5-0/). The 5a4159fa8044/csharp%202.0%20specification_sept_2005.do
Microsoft MVP Award Program Blog CSharp Language Specification C# 2.0 (em ingls)
13. dotnet/roslyn (https://github.com/dotnet/roslyn/wiki/ Pgina visitada em 30 de Maro de 2013
Languages-features-in-C#-6-and-VB-14).GitHub. 27. http://www.microsoft.com/en-us/d
Consultado em 26 de novembro de 2016 ownload/details.aspx?id=7029 CSharp Language
14. dotnet/roslyn (https://github.com/dotnet/roslyn/blob/ Specification C# 4.0 (em Ingls) Pgina visitada em 29
c830f88e093d8753e92e7f1054393e456e6fac20/docs/L de Maro de 2013
28. Book sources (https://en.wikipedia.org/wiki/Special: msdn.microsoft.com. Consultado em 26 de novembro
BookSources/0470499486). Wikipedia (em ingls) de 2016
29. Compiling Apps with .NET Native(https://msdn.mi 30. Repositrio (https://github.com/dotnet/roslyn)
crosoft.com/en-us/library/dn584397(v=vs.1 10).aspx).

msdn.microsoft.com. Consultado em 26 de novembro


Ligaes externas
Website oficial (http://msdn.microsoft.com/pt-br/vcsharp/default.aspx) (em portugus)
Visual C# 2010 Express (http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-csh
arp-express) (em ingls)
C Sharp (http://www.dmoz.org/Computers/Programming/Languages/C-sharp/) no Open Directory Project

Obtida de "https://pt.wikipedia.org/w/index.php?title=C_Sharp&oldid=48278226"

Categorias: Microsoft Visual Studio C Sharp Normas ISO Normas IEC Normas Ecma
Linguagens de programao criadas em 2001

Esta pgina foi modificada pela ltima vez (s) 19h58min de 15 de maro de 2017.
Este texto disponibilizado nos termos da licena Creative Commons - Atribuio - Compartilha Igual
3.0 No Adaptada (CC BY-SA 3.0); pode estar sujeito a condies adicionais. Para mais detalhes,
consulte as condies de uso.