Você está na página 1de 10

Introdução a Linguagem C#

Sumario:
 Estrutura de um programa em C#
 Classes em C#
 Namespaces
 Interfaces
 Structs
 Delegados

1. C# (CSharp) – Estrutura geral de um programa


Os programas C# podem consistir em um ou mais arquivos. Cada arquivo pode conter zero ou
mais namespaces. Um namespace pode conter tipos como classes, estruturas, interfaces,
enumerações e delegados, além de outros namespaces. A seguir está o esqueleto de um
programa em C# que contém todos esses elementos.

De acordo co o site da Microsoft, a estrutura dum programa em C# pode ser vista na figura
seguinte.

30.07.2019 O Grupo da Disciplina


Introdução a Linguagem C#

30.07.2019 O Grupo da Disciplina


Introdução a Linguagem C#

2. C# (CSharp) – Classes
As classes são declaradas usando a palavra-chave class, seguida por um identificador exclusivo,
conforme mostrado no exemplo a seguir:

A palavra-chave class é precedida pelo nível de acesso. Como público é usado nesse caso,
qualquer pessoa pode criar instâncias dessa classe. O nome da classe segue a palavra-
chave class. O nome da classe deve ser um nome do identificador válido em C#. O restante da
definição é o corpo da classe, em que o comportamento e os dados são definidos. Campos,
propriedades, métodos e eventos em uma classe são coletivamente denominados de membros
de classe.

3. C# (CSharp) - Namespaces
Com uma grande quantidade de código, costumamos trabalhar com mais nomes (classes,
métodos e dados nomeados). Isso pode acabar provocando um conflito entre dois ou mais
nomes, e, consequentemente, gerar uma falha de desenvolvimento. Esse conflito é mais
provável de acontecer quando o programa usa bibliotecas de terceiros.

Uma forma de corrigir conflitos de nomes é usar prefixos com algum tipo de qualificador ou um
conjunto de qualificadores. Mais há uma desvantagem quanto a este procedimento, já que os
nomes tendem a ficar muito extensos, o que faz com que os programadores percam mais tempo
para digitar, ler e reler nomes extensos e incompreensíveis do que para desenvolver o próprio
software. Assim, podemos concluir que este método não é escalonável (muito menos
aconselhável).

Já, se usarmos namespaces, o conflito de nomes é resolvido. Cria-se um contêiner nomeado


para outros identificadores, como classes. Com duas classes de mesmo nome, mas cada uma
localizada em um namespace diferente, não haverá conflito entre elas.

Suponha o desenvolvimento dum sistema bancário. Com o crescimento do sistema, passamos a


ter diversas classes nele.
Por exemplo, as que envolvem o modelo de nosso sistema como as classes ligadas a conta

30.07.2019 O Grupo da Disciplina


Introdução a Linguagem C#

 Classe Conta
 Classe ContaPoupanca
 Classe Conta Corrente

As classes voltadas ao relacionamento com o cliente:

 Classe Cliente
 Classe Gerente

As classes ligadas aos empréstimos feitos pelo cliente:

 Classe Credito
 Classe CreditoImobiliario;

O grande problema que surge com os sistemas grandes é a organização de todas as suas classes.
Para evitar que o sistema fique caótico, podemos agrupar as classes por características comuns e
dar um nome para cada um desses grupos. Isto é, agruparíamos um conjunto de classes em um
espaço em comum e lhe daríamos um nome, como por exemplo Caelum.Banco.Investimentos.
Esse espaço definido por um nome é chamado de namespace.

Segundo a convenção de nomes adotada pela Microsoft os namespaces devem ter a


forma: NomeDaEmpresa.NomeDoProjeto.ModuloDoSistema.

Exemplos:

No nosso caso, os namespaces ficariam da seguinte forma:

 Caelum.Banco.Usuarios
 Caelum.Banco.Investimentos

Exemplos:

30.07.2019 O Grupo da Disciplina


Introdução a Linguagem C#

Antes de realizar essa separação de nossas classes em namespaces, elas estavam no mesmo
namespace: o namespace do nome do projeto. Assim, para definir o cliente referente a um
investimento precisaríamos apenas criar um novo atributo na classe Investimento: private Cliente
cliente.
Contudo, com o uso dos namespaces, a classe Cliente não está mais no mesmo namespace da
classe Investimento. Para poder referenciar qualquer uma das quatro classes anteriores devemos
indicar o seu namespace:

Exemplos:

30.07.2019 O Grupo da Disciplina


Introdução a Linguagem C#

O nome completo de uma classe agora envolve adicionar uma referência ao namespace dela.
Por isso, deixamos de acessar Gerente diretamente e passamos a
acessar Caelum.Banco.Usuarios.Gerente.
Um exemplo de código já existente na plataforma C# que usa namespaces envolve imprimir uma
única linha no console usando o método WriteLine de System.Console:

Note como o uso de namespaces para organizar suas classes acaba implicando em mais código
na hora de utilizar as mesmas. Por isso, podemos criar atalhos ao dizer que usaremos as classes
que pertencem a um namespace. Por exemplo, podemos citar que usaremos o
namespace System e, a partir de então, podemos escrever nosso código como se tudo o que
está dentro do namespace System estivesse no mesmo namespace em que estamos:

Podemos também usar vários namespaces dentro do mesmo arquivo:

A utilização da palavra chave using permite notificar ao compilador que usaremos classes
daquele namespace. Com isso, obtemos a vantagem da organização do código através de
namespace e continuamos com um código enxuto.

Em jeito de resumo, veja os exemplos abaixo:

 A classe StringBuilder, usada para trabalhar na manipulação de strings, encontra-se no


namespace System.Text. Seu nome completo é System.Text.StringBuilder.
 A classe Calendar, usada para trabalhar com divisões de tempo, se encontra no
namespace System.Globalization. Portanto seu nome completo
é System.Globalization.Calendar.

30.07.2019 O Grupo da Disciplina


Introdução a Linguagem C#

 A classe SqlConnection, usada para estabelecer uma conexão com o banco de dados SQL
Server, encontra-se no namespace System.Data.SqlClient, portanto, seu nome completo
é System.Data.SqlClient.SqlConnection, entre outros exemplos...
 Perceba que o uso do namespace facilita o aprendizado de outras classes relacionadas ao
mesmo assunto, já que o namespaceSystem.Data.SqlClient por exemplo agrupa todas as
classes relacionadas ao SQL Server e assim por diante.

NOTA: O comando using pode ser usado para especificar uma classe sem precisar especificar o
namespace ao qual ela pertence

4. C# (CSharp) – Estruturas (structs)


Structs são definidos usando a palavra-chave struct, por exemplo:

Os structs compartilham a maioria da mesma sintaxe que as classes. O nome da struct deve ser
um nome do identificador válido em C#. Os structs são mais limitados do que as classes das
seguintes maneiras:

 Dentro de uma declaração de struct, os campos não podem ser inicializados, a menos que
sejam declarados como const ou estáticos.
 Um struct não pode declarar um construtor sem padrão (um construtor sem parâmetros)
ou um finalizador.
 Os structs são copiados na atribuição. Quando um struct recebe uma nova variável, todos
os dados são copiados e qualquer modificação na nova cópia não altera os dados da cópia
original. É importante se lembrar disso ao trabalhar com coleções de tipos de valor
como Dictionary<string, myStruct>.
 Os structs são tipos de valor, diferentemente das classes, que são tipos de referência.
 Diferentemente das classes, os structs podem ser instanciados sem usar um operador new.
 Os structs podem declarar construtores que têm parâmetros.
 Um struct não pode herdar de outra estrutura ou classe e ele não pode ser a base de uma
classe. Todos os structs herdam diretamente do ValueType, que herda do Object.
 Um struct pode implementar interfaces.
 Um struct não pode ser null, e uma variável de struct não pode receber null, a menos que
a variável seja declarada como um tipo que permite valor nulo.

30.07.2019 O Grupo da Disciplina


Introdução a Linguagem C#

5. C# (CSharp) – Interfaces
Uma interface contém definições para um grupo de funcionalidades relacionadas que
uma classe ou um struct pode implementar.

Usando interfaces, você pode, por exemplo, incluir o comportamento de várias fontes em uma
classe. Essa funcionalidade é importante em C# porque a linguagem não dá suporte a várias
heranças de classes. Além disso, use uma interface se você deseja simular a herança para structs,
pois eles não podem herdar de outro struct ou classe.

Você define uma interface usando a palavra-chave interface. como mostrado no exemplo a
seguir.

Por convenção, os nomes de interface começam com uma letra maiúscula I.

Qualquer classe ou struct que implemente a interface IEquatable<T> deve conter uma definição
para um método Equals que corresponda à assinatura que a interface especifica. Como
resultado, você pode contar com uma classe que implementa IEquatable<T> para conter um
método Equals com o qual uma instância da classe pode determinar se é igual a outra instância
da mesma classe
A definição de IEquatable<T> não fornece uma implementação para Equals. A interface define
somente a assinatura. Dessa forma, uma interface em C# é semelhante a uma classe abstrata, na
qual todos os métodos são abstratos. No entanto, uma classe ou struct pode implementar várias
interfaces, mas uma classe pode herdar apenas uma única classe, abstrata ou não.

Quando uma classe ou struct implementa uma interface, a classe ou o struct deve fornecer uma
implementação para todos os membros que a interface define. A interface não fornece
nenhuma funcionalidade que uma classe ou um struct possa herdar da forma que ela pode
herdar a funcionalidade da classe base. No entanto, se uma classe base implementa uma
interface, qualquer classe que é derivada da classe base herda essa implementação.

O exemplo a seguir mostra uma implementação da interface IEquatable<T>. A classe de


implementação, Car, deverá fornecer uma implementação do método Equals.

30.07.2019 O Grupo da Disciplina


Introdução a Linguagem C#

Resumo de interfaces

Uma interface tem as propriedades a seguir:

 Uma interface é como uma classe base abstrata que contém apenas membros
abstratos. Qualquer classe ou struct que implementa a interface deve implementar todos
os seus membros.
 Uma interface não pode ser instanciada diretamente. Seus membros são implementados
por qualquer classe ou struct que implemente a interface.
 As interfaces podem conter propriedades, indexadores, métodos e eventos.
 As interfaces não têm implementações de métodos.
 Uma classe ou struct pode implementar várias interfaces. Uma classe pode herdar uma
classe base e também implementar uma ou mais interfaces.

6. C# (CSharp Delegado
Delegados são usados para passar métodos como argumentos a outros métodos. Os
manipuladores de eventos nada mais são do que métodos chamados por meio de
delegados. Ao criar um método personalizado, uma classe como um controle do Windows
poderá chamá-lo quando um determinado evento ocorrer. O seguinte exemplo mostra uma
declaração de delegado:

30.07.2019 O Grupo da Disciplina


Introdução a Linguagem C#

TPC
1. Apresente 2 exemplos de aliases para namespaces;
2.

Links uteis:
 https://docs.microsoft.com/pt-br/dotnet/csharp
 https://www.caelum.com.br/apostila-csharp-orientacao-objetos/namespaces/
o Namespaces, aliases para namespaces, namespaces aninhados;
 http://msdn.microsoft.com/en-us/library/893ke618.aspx)
 https://visualstudio.microsoft.com/pt-br/downloads/
o Baixar a versao Community do Visual Studio
 https://www.devmedia.com.br/conceitos-e-exemplos-namespaces-estrutura-da-
linguagem/18818
 https://docs.microsoft.com/pt-br/dotnet/csharp/programming-guide/inside-a-
program/general-structure-of-a-csharp-program

30.07.2019 O Grupo da Disciplina

Você também pode gostar