Classes parciais, abstratas e seladas com C#

Wiliam Buzatto
3 min readApr 26, 2018

Os modificadores acima citados são utilizados para alterar declarações de tipo e membros de tipo.

O que?

Calma, vamos compreender cada um deles, aplicando um cenário para obtermos um completa assimilação do que cada um faz, como e quando utiliza-los.

Classe Parcial (partial class)

Cenário 1

Vamos pensar em um cenário onde a equipe de desenvolvimento está trabalhando em um projeto, e dois programadores precisam trabalhar na classe Cliente. Caso o cenário seja muito complexo e difícil de realizar um merge posterior, cada programador pode trabalhar em um arquivo separado, declarando o modificador partial que o compilador saberá que se trata da mesma classe e irá tratar como uma só.
Exemplo:

Elas se tornarão uma só com as duas propriedades e o método.

Cenário 2

Este outro cenário é mais comum, quando utilizamos um ORM.
Pegarei como exemplo a utilização do EntityFramework, modelo Database First. Este modelo parte do principio que você possui o banco de dados(Geralmente proveniente do legado da empresa) e utiliza a ferramente do EF para gerar suas classes de domínio.
Neste caso você não deve alterar essas classes geradas automaticamente, porém você quer utilizar Data Annotations para criar validações e até mesmo modificar a exibição na tela, pois você está utilizando o Scaffolding do Visual Studio.

Então nesse caso também criamos uma classe Parcial, onde escrevemos todas as nossas customizações.
Não termos mais problema em modificar um arquivo gerado automaticamente, onde perderíamos o código customizado em próximo uso do EF

Classe Abstrata (abstract class)

Uma classe com o modificador abstract indica que essa classe não pode ser instanciada.

Pra que serve então?

Um cenário simples é o caso clássico de orientação a objeto de Herança, onde temos classes filhas que herdam de uma pai, porém a classe pai não faz sentido ser instanciada, ela serve apenas como base para as demais.
Neste caso para que ela não seja instanciada, marcamos ela com sendo abstrata.

Também é comum vermos a termo Classe Incompleta para uma classe abstrata.

Neste modelo, temos uma classe base (ou classe pai) Pessoa e duas classes filhas que herdam dela. Nas classes filhas podemos então sobrescrever o método Atualizar, para adicionar a lógica necessária.

Aqui já entramos em polimorfismo e herança, porém deixarei para conceitualizar Polimorfismo, Herança e Encapsulamento em um próximo artigo

Classe selada (sealed)

A classe selada, por sua vez impede que outras classes herdem dela. É o oposto da abstrata, onde precisa de herdeiros para fazer sentido.

Pensamos em uma aplicação onde temos várias classes gerando um hierarquia de heranças. Um Superclasse que é herdade por uma subclasse (filha) que é herdade por uma terceira… podemos ir longe com isso. Para que isso não ocorra, marcamo a classe com o modificador sealed.
Chamamos uma classe selada, de classe pronta, pois não será herdade e não terá sobrescrita de métodos.

Concluindo

Existem vário outros modificadores de comportamento e também modificadores de acesso, serão abordados em um próximo artigo.

Preciso utilizar isso?

Depende. Você pode construir uma aplicação inteira sem utilizar estes modificadores. De acordo com a maturidade da aplicação e conhecimento técnico, necessidades vão surgindo. Esses modificadores são utilizados em conjunto com outros artefatos da programação OO, Interfaces etc.. Por enquanto o foco foi contextualizar a definição. Depois veremos esses modificadores em conjunto com paradigmas da Orientação a Objetos.

--

--