Para quem estiver interessado, encontrei uma lista muito interessante de features que foram introduzidas no C# aqui. Esta é uma lista muito completa que contém todas as features que vou explicando uma a uma nesta série de posts. Já falámos sobre Generics e Iterators. Agora vamos falar de tipos parciais.
Um tipo parcial é considerado como tal quando a sua definição está espalhada por várias partes em um ou mais ficheiros. Não tem que ser em múltiplos ficheiros, mas poderia. Este é um conceito muito simples que nos traz alguns benefícios. Vamos ver:
Obrigado por lerem, o próximo post será sobre nullable types!
Disclaimer: Por vezes existem termos que eu traduzo nestes posts e outros não. Isto tem a ver com o quão confortável me sinto com cada tradução que faço. Consigo sentir-me confortável o suficiente para dizer tipos parciais, mas não tipos nulos, ou algo similar. Por vezes isto leva a inconsistências, mas qualquer dúvida sobre o conteúdo do post poderá ser respondida!
Um tipo parcial é considerado como tal quando a sua definição está espalhada por várias partes em um ou mais ficheiros. Não tem que ser em múltiplos ficheiros, mas poderia. Este é um conceito muito simples que nos traz alguns benefícios. Vamos ver:
- Se um tipo for parcial, múltiplos programadores podem trabalhar em cada uma das partes. Isto permite-nos uma forma mais organizada de trabalhar, e pode acelerar a produção.
- Em Winforms, por exemplo, é gerada uma classe parcial para cada Form para que o programador possa separar a lógica. Desta forma, uma parte contém informação acerca do design e a outra parte contém a lógica do Form. A parte do design é manipulada pela framework, e por isso é várias vezes sobrescrita. Este é um padrão bastante utilizado pelo .Net. O Entity Framework utliza isto também nos seus templates T4. Por defeito são criadas classes parciais para cada entidade e depois podemos criar mais partes de cada uma das entidades evitando assim perder as nossas alterações a cada classe, quando os templates gerarem de novo a definição.
- Não existe nenhuma penalização em termos de performance por utilizarmos tipos parciais, porque todas as partes serão unificadas após compilação. Esta feature é apenas para conveniência do programador.
Abaixo estão listadas algumas inconveniências de utilizar tipos parciais:
- Um tipo parcial geralmente tem a sua lógica ou definição espalhadas pelas suas partes, por isso pode dificultar a parte do código que queremos (este é um argumento fraco, porque as IDE's de hoje tornam a pesquisa fácil)
- Quando utilizamos tipos parciais, por vezes pode tornar-se complicado perceber todos os atributos que os seus membros têm, ou quais as interfaces que um tipo implementa (o mesmo que antes, as IDE's são poderosas o suficiente para ultrapassar este problema.
Um tipo parcial é sempre a soma dos seus atributos, interfaces implementadas, generic parameters, documentação, etc. Vamos ver um exemplo:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public interface ISomeInterface | |
{ | |
} | |
public class Foo | |
{ | |
} | |
public partial class Bar : ISomeInterface | |
{ | |
} | |
[SomeAttribute] | |
public partial class Bar : Foo | |
{ | |
} |
Isto é equivalente a:
Para usar um tipo parcial, tenham em conta que as declarações das partes têm que estar no mesmo namespace.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[SomeAttribute] | |
public class Bar : Foo, ISomeInterface | |
{ | |
} |
Obrigado por lerem, o próximo post será sobre nullable types!
Disclaimer: Por vezes existem termos que eu traduzo nestes posts e outros não. Isto tem a ver com o quão confortável me sinto com cada tradução que faço. Consigo sentir-me confortável o suficiente para dizer tipos parciais, mas não tipos nulos, ou algo similar. Por vezes isto leva a inconsistências, mas qualquer dúvida sobre o conteúdo do post poderá ser respondida!
Comments
Post a Comment