Вы находитесь на странице: 1из 4

Fundamentos de classe do C# - O Sistema de tipos ================================================= Common Type System (CTS) alem de definir os tipos, o CTS tambm estipula

as regras que o Common Language Runtime (CLR) segue com referencia a aplicativos que decl aram e utilizam esses tipos. Veremos neste arquivo esse novo tipo de sistema de tipos para que voc possa aprender os tipos disponveis para os desenvolvedores de C # e entender as ramificaes da utilizao dos diferentes tipos nos programas C#.

Tudo um objeto =================

A maioria das linguagens orientadas a objetos (OO) tem dois tipos diferentes: aq ueles tipos que so intrnsecos linguagem (tipos primitivos) e aqueles tipos que pod em ser criados por usurios da linguagem (classes). Os tipos primitivos so tipos s imples como caracteres string e nmeros e classes so tipos criados pelos usurios bem mais elaborados e complexos. Ter dois conjuntos de tipos discretos causa uma gr ande quantidade de problemas, onde um deles est diretamente relacionado compatibi lidade. Por exemplo, voc deseja ter uma coleo de INTS em um sistema com estes dois conjuntos de tipos, logo voc precisar criar uma classe especificamente para armaze nar valores do tipo INT e se em dado momento voc precisar de uma coleo de DOUBLES, teria que fazer os mesmo para este tipo. Isto por que estes tipos primitivos ger almente no se tm nada em comum e no so objetos reais, ento eles no surgem de uma clas e bsica comum, isto eles devem ser tratados individualmente em seus prprios termos . Outro problema semelhante nestes sistemas tradicionais surge quando voc quer qu e um mtodo possa receber um argumento/parmetro de qualquer tipo suportado pela lin guagem. Como estes tipos primitivos so incompatveis, no permitido especificar um ar gumento como esse a menos que escreva classes empacotadoras para cada tipo primi tivo. Felizmente isto no mais problema no mundo da .NET e do C# porque tudo no CTS um o bjeto. De fato, no apenas tudo um objeto como tambm, ainda mais importante, todos os objetos derivam implicitamente de uma nica classe bsica definida como parte do CTS. Essa classe bsica, chamada System.Object.

Tipo de valor e tipos de referncia ==================================== Criar uma linguagem onde tudo um objeto no um conceito novo. A maior desvantagem de tornar tudo um objeto sempre foi o desempenho pobre. Os projetistas do CTS se depararam com a tarefa de criar um sistema de tipos em que tudo um objeto mas o sistema de tipos trabalha de maneira eficiente quando aplicvel. A soluo deles foi separar os tipos de CTS em duas categorias tipos de valor e tipos de referencia. Esses termos, refletiro como as variveis so alocadas e como elas funcionam interna mente.

Tipos de valor =============== Quando tiver uma varivel que um tipo de valor, voc tem uma varivel que contm dados r eais. Portanto, a primeira regra de tipos de valor que eles no podem ser nulos. P or exemplo, abaixo eu aloquei memria criando uma varivel do System.Int32 em C#.

int i = 32;

Alm disto, o ato de atribuir um valor a i resulta neste valor de 32 bits sendo in serido (moved into) nesse espao alocado. H vrios tipos de valor definido em C#, inc luindo enumeradores, estruturas e primitivos. A qualquer hora que declarar uma v arivel de um desses tipos, voc alocou o nmero de bytes associados com esse tipo na pilha e est trabalhando diretamente com um array alocado de bits. Alm disse, ao pa ssar uma varivel que um tipo de valor, voc est passando o valor dessa varivel e no u a referncia a seu objeto subjacente.

Tipos de referncia ==================== Os tipos de referncias so semelhantes s referncias em C++ no sentido de que so pontei ros do tipo seguro isto significa que em vez de ser apenas um endereo que poderia ou no indicar o que voc pensa que ele faz, uma referncia, quando est no for nula, se mpre tem a garantia de apontar para um objeto que do tipo especificado e que f fo i alocado no heap, alm disse temos o fato de uma referncia poder ser nula. Por exemplo, um tipo de referncia (string) est sendo alocado, o que est acontecendo nos bastidores que o valor foi alocado no heap e uma referncia a esse valor foi retornada. string s = "Here Click Software Office"; Como com tipos de valor, existem vrios tipos definidos de tipos de referncia em c# : classes, arrays, delegados e interfaces.

Boxing e unboxing ================== Ante o contexto exposto voc j deve estar se perguntando como que essas diferentes categorias de tipos tornam o sistema mais eficiente? Isto feito por meio do boxi ng. Boxing a converso de um tipo de valor em um tipo de referncia, o caso recproco quan do um tipo de referncia convertido de volta para um tipo de valor (unboxing). Essa tcnica que faz a .NET ser to excelente podendo fazer com que tudo seja um obj eto, porm s quando realmente necessita ser. Por exemplo, voc declara uma varivel do tipo System.Int32 a memria para esta pilha alocada voc pode passar esta varivel par a qualquer mtodo definido como um tipo System.Object e acessa os membros a que es ta lhe d acesso comportando-se como um objeto. int varNum = 42; object varObj = varNum; // Tipo de Valor // varNum convertido (boxed) em varObj

Neste exemplo criamos uma varivel (varNum) do tipo int. Como j foi dito int um tip o primitivo, ou seja, um valor. Na segunda linha, o compilador v que a varivel var Num esta sendo copiada para um tipo de referencia varObj, fazendo assim o que se chamado de boxing. Agora, faremos o contrario converteremos um tipo de referencia para um tipo prim itivo, o que recebe o nome de unboxing int varNum = 42; object varObj = varNum; xed) em varObj int varNum2 = (int)varObj nboxed) para int. //Convertido de volta (u // Tipo de Valor // varNum convertido (bo

A raiz de todos os tipos: system.Object ======================================= Suporta todas as classes na hierarquia de classes do .NET Framework e fornece se rvios de baixo nvel para classes derivadas. Este a classe base fundamental de toda s as classes do .NET Framework; ela a raiz da hierarquia de tipos. A tabela 1 de screve os quatro mtodos pblicos e a tabela 2 os mtodos protegidos que todos os tipo s obtm gratuitamente. Tabela 1 - Mtodos pblicos do System.Object ============================================= bool Equals() * Esse mtodo duas referncia de objetos em tempo de execuo para determinar se elas so exatamente os mesmos objetos. Se as duas variveis referenciam o mesmo obj eto, o valor de retorno TRUE. No caso de tipos de valor, esse mtodo retorna TRUE se os dois tipos forem idnticos e tiverem o mesmo valor. int GetHashCode() * Recupera o cdigo de hash especificado para um objeto. As funes de hash so utilizadas quando o implementador de uma classe quer colocar o cdigo de hash de u m objeto em uma tabela de hash por razes de desempenho. Type GetType() * Utilizado com os mtodos de reflexo para recuperar informaes de tipo para u m dado objeto. string ToString() * Por padro, esse mtodo utilizado para recuperar o nome do objeto. Ele pod e ser anulado por classes derivadas para retornar uma representao de string do obj eto mais amigvel ao usurio.

Tabela 2 - Mtodos protegidos do System.Object =============================================== void Finalize() * Esse mtodo chamado pelo tempo de execuo para permitir limpeza antes da co leta de lixo. Observe que esse mtodo pode ou no ser chamado. Portanto, no coloque cd

igo que deve executar nesse mtodo. Essa regra entra em algo chamado finalizao deter minista. Object MemberwiseClone * Esse membro representa uma cpia rasa (shallow copy) do objeto. Com isso quero dizer uma cpia de um objeto contendo referncias a outros objetos que no incl uem cpias dos objetos referenciados. Se voc precisar que suas classes suportem uma cpia profunda (deep copy), que inclui cpia de objetos referenciados, voc mesmo dev e programar a interface ICloneable e fazer manualmente a clonagem ou cpia.

Espero ter ajudado de alguma forma. Por gentileza no deixe de postar seus comentri os At a prxima.

Вам также может понравиться