segunda-feira, 27 de setembro de 2010

Application Domain

  • São ambientes preparados para rodar aplicações externas com segurança, um exemplo é o IIS, que roda um assembly(site) ao mesmo empo com vários processos diferentes, um para cada um dos usuários diferentes. Outro é o IE, que roda vários assemblies ao mesmo tempo separadamente para cada um dos sites. Basicamente trata-se da separação de recursos por assembly
  • A Classe AppDomain
    • activationContext: Retorna o contexto para o application Domínio Corrente.
    • applicationIdentity:  A identidade do AppDomain
    • applicationTrust: Descricao das informacoes sobre permissoes e nivel de segurança.
    • baseDirectory: Diretório base onde roda o appDomain
    • currentDomain: Analiza o Domínio Corrente e verifica permissões
    • domainManager: Retorna o gerenciador de Domínios que estava disponível quando a aplicação foi iniciada
    • dynamic Directory: Diretório onde assemblies dinâmicos são executados
    • Evidence: Recupera a Evidence, tem a ver com contexto de segurança do appDomain.
    • friendlyName: um alias para o appDomain
    • id: Numero que identifica o processo
    • relativeSearchPath: Recupera o caminho relativo aos assemblies de base
    • setupInformation: Configuração do appDomain
    • shadowCopyFile: Verifica se o assembly é uma cópia
    • applyPolicy: Retorna o nome do assembly após uma política ter sido atribuída
    • createComInstanceFrom: Cria uma instancia de um tipo COM
    • createDomain: Cria um application Domain
    • createInstance: Cria uma instancia de um tipo especificado em um assembly
    • createInstanceFrom: Cria uma instancia de um tipo especificado em um assembly
    • createInstanceAndUnwrap: Cria uma instancia de um tipo especificado em um assembly
    • defineDynamicAssembly: Define um assembly dinâmico em um AppDomain
    • executeAssembly: Executa o assembly de um determinado arquivo
    • doCallBack:  Usa delegates para rodar um código de outra appDomain
    • executeAssemblyFromFile: Executa um assembly
    • getAssemblies: retorna o assembly que está executando
    • getCurrentThreadId: Retorna o Id da thread rodando
    • getData: retorna o valor guardado naquele apDomain
    • initializeLifeTimeService: impede o timeout
    • isDefaultAppDomain: Retorna se o domínio é ou não o padrão
  • Criando o appDomain
    • appDomain.CreateDomain: Cria
  • Carregando Assemblies
    • executeAssembly: Pode passar como parâmetro comandos, caminhos
    • executeAssemblyByName: Pode-se fazer uma referencia a um caminho de assembly e utilizar esse método para associar ao assemblly
  • Descarregando o appDomain
    • appDomain.Unload
  • Configurando o appDomain
    • Limitando privilégios de um appDomain
      • evidence: É a informacao que obtida apartir do assembly para se determinar a qual grupo de código esse assembly deve fazer parte. Esse grupo de código por sua vez é quem determina os privilégios do assembly em questão. Esse evidence pode ser um diretório, um site, uma assinatura.
      • Apartir do objeto System.Security,Policy.Evidence, um objeto é criado.
      • O construtor necessita do endereço do assembly e do tipo de segurança.
      • System.Security,Policy.Zone, são tipo de evidences pré-definidos utilizando uma enumeração
      • É do mesmo modo que citado acima porem, a evidence é atribuído no create do appDomain,
    • Configurando as propriedades do appDomain
      • Propriedades
        • applicationBase: A mais importante, todas as outras já estão pré-definidas. Recupera ou atribui o endereço do aplicativo.
        • activationArguments: Recupera ou atribui as propriedades de um aapDomain criado.
        • applicationName: é o nome da aplicação
        • applicationTrust: Informações sobre Security e Trust
        • configurationFile: Nome do arquivo de configuração
        • disallowApplicationBaseProbing: Especifica se o application base está testado (probed).
        • disallowBindingRedirects: Recupera ou atribui se a aplicacao permite redirecioamento de associação de assemblies
        • disallowCodeDownloads: Permite ou não q a aplicacao faca download de códigos
        • disallowPublisherPolicy: Especifica de a secao “Publisher” está associada ao appDomain
        • dynamicBase: Local dos arquivos gerados dinamicamente
        • licenseFile: Local do arquivo de licença relativo a aplicacao
        • loaderOptmization: Especifica a Politica de otimização utilizada na otimização da carga de um executável

quinta-feira, 23 de setembro de 2010

Threading(System. Threading)

  • Definição: Fazer uma coisa enquanto espara a outra ficar pronta
  • Threads simples
    • Propriedades
      • isAlive:Verifica a execução da thread
      • isBackground:Verifica ou atribui a thread para background
      • isThreadPollThread: Verifica se a thread faz parte de um pool de threads
      • managedThreadId: Recupera o numero q identifica a query
      • name: Recupera ou associa um nome a thread
      • priority: Recupera ou associa uma priorida a thread
      • threadState: Recupera o estado da thread
    • Metodos
      • abort: Dispara uma excecao para interromper a execução da thread
      • interrupt: Dispara uma exceção quando a thread está bloqueada. (threadState.WaitJoinSleep)
      • join: Bloqueia a chamada da Thread até q ela termine
      • Resume:Não utilizar
      • Start: Agenda a execução de uma thread
      • Suspend: Não Utilizar
    • Propriedades (Statics)
      • currentContext: Recupera o threadContext relacionado a thread
      • currentthread: Recupera a thread atual.
    • Métodos (Statics)
      • beginCriticalRegion: Regiao delimitada nao pode ser abortada serguramente.
      • endCriticalRegion: Indica o final de uma região critica
      • getDomain: Recupera o appDomain da thread
      • getDomanId: Recupera um identificador único para aquela appDomain
      • resetAbort: Cancela uma chamada do abort
      • sleep: Bloqueia uma thread por um certo número de iterações
      • volatileRead: Le a última versão do valor de um campo indiferente do processador que o escreveu
      • votatileWrite: Escreve o valor do campo imediatamente
    • threadStateEnumeration
      • aborted: Parou
      • abortRequest: Pediu pra parar, mas ainda nao parou
      • background: Esta rodando em background
      • running: começou
      • stopped: parou
      • stoppedRequest: pediu pra parar
      • suspended: Suspenso. Suporta voltar ou continuar
      • suspendedRequest: Pediu pra suspender. Suporta voltar ou continuar
      • Unstarted: Criou mas ainda não usou
      • waitSleepJoin: Bloqueada a pedido de algum método
    • Criação de Thread Simples
      • Função que o Thread vai executar
      • Objeto do tipo ThradStart, como parâmetro vai a função
      • Objeto do tipo thread, como parâmetro vai o threadStart
    • Thread Múltiplos
      • Do mesmo modo que as simples
    • threadJoin
      • Após iniciado o join faz com que elas aguardem a execução das outras pra proceguir
    • Prioridade da threads
      • Nesta Ordem
        • Highest
        • Above normal
        • Normal
        • Below Normal
        • Lowets
    • Passando dados para uma thread
      • Utiliza-se o ParametrizedStartThread no lugar do startThread que é igual ao outro só que o método que será executado, recebe parâmetros que são passados no método Start.
    • Parando as Threads
      • Utiliza-se o thread.Abort. Atenção para o local onde a thread  nome para as inconsistências. Estes locais são chamados regiões criticas.
    • Compartilhando informações
      • No momento e que as threads estão rodando dependendo do processador alguns valores resultandes das threads podem passar em branco. Para isso faremos uso do Interlocked. Observar que esta classe comente é usada em operações aritimeticas
      • Interlocked
        • add: faz a adição de dois números
        • exchange:Troca dois valores de uma operação
        • increment: adiciona 1 ao valor da operação atômica
        • read: Le um valor de uma operação atômica
      • SincronizationLocks
        • Sincroniza o acesso a objetos, para não haver mistura nos dados
        • enter: Cria uma transação de segurança para um objeto especifico
        • exit: Libera a trava
        • tryEnter: tenta criar mas tem u tempo de timeout
        • wait
      • DeadLocks
        • É o caso em que dois pedaços de código tantam acessar o mesmo objeto se anulando
      • Outros métodos de sincronização
        • readerWriterLock: Trava para a escrita e não para a leitura
        • mutex: Sincronizacao através do appDomain
        • semaphore: barra o acesso a recurso e cria algumas threads
        • event: Notifica ás threads que um evento ocorreu
    • Programação Assíncrona
      • Significa autorizar partes do código a rodar em threads diferentes
      • Todos os métodos que utilizam os modelo BeginXXX, EndXX, funcionam como threads assíncronas
      • Modelos de utilização
        • Wait-Until-Done: Inicia o método assincrono e vai fazer outra coisa. Esta outra coisa fica bloqueada ateh o q estiver fazendo tiver terminado.
        • Poolling: Igual ao anterior porem existe um código que testa se a outra atividade já terminou
        • CallBack: Nesse caso um método e especificado para ser executado quando o método parar de executar
        • Execoes e APM
          • As exceções somente são executas depos de todo o trecho BeginXXX EndXXX terem sido executados
        • Usando o pool de Threads
          • São threads já prontas e recomendadas pelo framework
          • Métodos
            • getAvaiableThreads:Numero de threads disposnivel para serem utilizadas no pool
            • getMaxThreads:Numero Maximo de threads suportados pelo pool
            • getMinThreads: Numero mínimo de threads criados a qquer momento
            • queueUserWorkItem: Adiciona u trabalho ao pool para ser executado a qquer momento
            • registerWaitForSingleObject: Permite que o callback possa ser associado a um WaitHandle, quando este handle está sinalaizado
            • setMaxThread: Associa o numero maximo de thread desse pool
            • setMixThread: Associa o numero mínimo de thread desse pool
            • unsafeQueueNativeOverlapped:  Trabalha com IO de arquivos
            • unsafeQueueUserWorkItem: Enfilera um trabalho para threads de alta performance. Não propaga essa execução para uma thread seguinte
            • unsafeRegisterWaitForSingleObject: Usado para associar um CallBack a um Processo WaitHandle.
          • Motivos para se altarar o numero de Thread no pool
            • Quando o numero de trabalhos no pool é muito grande
            • Aumentando-se o numero mínimo inicial de threads aumenta-se a perfomance.
        • SychronizationContext
          • Serve pra ser utilizado em diferentes ambientes

quarta-feira, 22 de setembro de 2010

Desenhando Gráficos (System.Drawing)

  • Classes
    • Bitmaps: Encapsula um GDI+ bitmap, que é um pixel de uma imagem e seus atributos. Esta classe é utilizada para se trabalhar com imagens que são definidas por pixels. Esta classe é utilizada para se carregar ou salvar imagens.
    • Brush: Define os objetos que preencherão interiores de formas geométricas
    • Brushes: São pinceis coloridos, evitando a herança da classe Brush, não pode ser herdada
    • colorConverter: Converte as cores de um tipo para outro
    • colorTranslator: Traduz cores para e de estruturas  GDI+. Não pode ser herdada
    • font: Formata textos
    • fontConverter: Converte fontes de um tipo para outro.
    • fontFamily Agrupa Fontes
    • graphic s: usado toda vez que houver manipulação de imagens
    • icon: Usado para manipulação de ícones
    • iconConverter: Converte um ícone de um tipo para outro
    • image: Funcionalidades para o Bitmao e para o MetaFile.
    • imageAnimator: Animação em imagens com frames
    • imageConverter: Coverte imagens de um tipo em outro
    • ImageFormatConverter: Converte cores de um tipo em outro
    • Pen: Objetos para desenhar linhas, curvas e flexas. Não pode ser herdado
    • Pens: Pen de várias cores evitando a instancia da classe pen. Não pode ser herdado
    • pointConverter: Converte um objeto do tipo point em outro
    • retangleConverter: Converte retângulos de um tipo em outro
    • region: Descreve o interior de retângulos. Não pode ser herdada
    • sizeConverter: Converte de um tipo em outro
    • solidBrush: Brush de uma so cor, ano pode ser herdado
    • stringFormat: Informações de layout de texto, alinhamento, espaçamento
  • System.Brushes: Tem em suas propriedades Solid Brush, que é a cor de um elemento.             
  • System.Colors: Cada uma de suas propriedades e de uma cor
  • System.Colors: Especificas as fontes da tela.
  • System.Icons: Cada propriedade e um ícone
  • System.Pens: Cada Propriedade e uma pen de um tamanho de uma cor diferente
    • textureBrush: Cada classe é um brush que utiliza uma imagem para preencher o interior da sua forma
    • toolBoxBitmapAttribute: Associa um ícone a um controle no design do form
    • characterRange: Posições de um caracter um uma string
    • color:  Uma cor
    • point: Par ordenado (x,,y), sendo estes valores sempre inteiros, representando uma posição
    • pointF: Par ordenado (x,,y), sendo estes valores do tipo Float, representando uma posição
    • rectangle: Conjunto de 4 inteiros representando a localização e o tamanho de um  retângulo.
    • rectangleF: Conjunto de 4 float representando a localização e o tamanho de um  retângulo.
    • size: Par ordenado de inteiros, representado altura e largura.
    • sizeF: Par ordenado de Float, representado altura e largura.
  • Representado o tamanho e a localização dos controles
    • A posição e sempre relativa ao canto superior esquerdo
    • Para se especificar uma posição é necessário q a Location = new Point(x,y)
    • Para se especificar um tamanho é necessário que Size = new Size(x,y)
  • Representando a cor dos controles
    • Utiliza-se a structure Color.nome da cor
    • Color.FromARGB(R,G,B); donde RGB são as cores primarias.
  • Desenhando linhas e formatos
    • Instanciar o objeto do tipo Graphics(System.Window.Form.Control.CreateGraphic)
    • Inatanciar um objeto do tipo pen
    • Chamar um objeto de graphic para desenhar usando a pen
    • Métodos
      • Clear: Limpa a superfície e preenche com uma cor específica
      • drawElipse: Desenha uma elipse ou um círculo limitado por um retângulo com suas especificações
      • drawIcon, drawIconUnstretched: desenha a imagem representada pelomicine no lugar especificado sem resize
      • drawImage, drawImageUnscaled , drawImageUnscaledAndClipped: Desenha a imagem no local especificado, sem resize nem cortes
      • drawLine:Desenha uma linha ligando dois pontos de uma coordenada
      • drawLines:Desenha uma serie de segmentos de linha conectando um array u array de Points
      • drawPath: Desenha uma serie de linhas e curvas conectadas
      • Draw pie: Desenha uma elipse especificada por um par coordenado e duas linhas radiais. Tipo uma fatia de pizza.
      • drawPolygon: Desenha uma figura com três ou mais lados definido por um array de point
      • drawRectangle: Desenha um quadrilátero especificado por um par coordenado
      • drawRectangles:Desenha vários Retângulos especificados por Retangles
      • drawString: Desenha um texto coma fonte e o brush especificado
        • Para todos estes métodos e necessário que um objeto pen seja especificado
    • Customizando Pens
      • Pen.dashStyle: Dash ------------
DashDot -.-.-.-.-.-.-.-
DashDotDot -..-..-..-..-..
Dot ................
Solid __________________
      • Pen.startCap e Pen.endCap: Recebem uma estrutura lineCap, para criarem as pontas das linhas, que podem ser setas, bolinhas, etc
    • Preenchendo Formas
      • Funciona do mesmo jeito que o draw, que ao invez de utilizarmos o Pen , usaremos brushes, so que brushes são abstratos e precisam que um de seus filhos sejam instanciados.
      • System.Drawing.Drawing2D.HatchBrush: BrushRetangular preenchido com fore e backcolor
      • System.Drawing.Drawing2D.linearGradienteColor: o preenchimento e feito com um gradiente.
      • System.Drawing.Drawing2D.PathGradienteBrush: Entre os pontos setados existe uma cor bem clarinha q vai sumindo
      • System.Brush .SolidBrush:Brush comum de uma so cor
      • System.Brush .TextureBrush: Brush feito com imagens
    • Trabalhamdo com imagens
      • A classe Image(System.Drawing.Image)
        • O objeto é criado apartir do método Image.fromFile quando for um arquivo, ou Image.fromStream quando for um Stream
      • A classe Bitmap(System.Drawing. Bitmap)
        • Usado para imagens estaticas e  System.Drawing.Imaging.Metafile para imagens animadas. Ambas são hedadas de Image. O amis comum é o bitmap que tem os métodos
          • getPixels: Retorna a cor do pixel
          • setPixel: atribui a cor de um pixel
      • Graphics.DrawImage: Pode ser usado na hora de se carregar uma imagem passando como parâmetro uma variedade de opções como tamanho, posição, etc..
      • Graphocs.DrawIcon ou Graphocs.DrawIconUnstretched: Usado para trabalhar com icones
      • Formatando Textos
        • Adicionado imagens aos textos
          • Class Font com variados construtores, incluindo font-family, tamnho estilo, etc.
          • Para se controlar o stextos dispomos da Classe stringFormat cujos membros são
            • alignment: Alinhamento horizontal
              • Center: Centro
              • Near: á Esquerda
              • Far: Á Direita
            • formatFlags: Valor da enumeração stringFormatFlags:
              • directionRightToLeft: Texto da esquerda para a direita
              • directionVertical: Alinhado verticalmente
              • displayFormatControl: Caracteres são mostrados no resultado como um símbolo
              • fitBlackBox: Os strings podem ultrapassar o retângulo que os delimita
              • lineLimit: Impede q o texto seja cortado pelo limite do retângulo, mostrando mostrando assim somente linhas inteiras
              • measureTrailingSpaces: Inclue o espaço que existe no final de cada linha.
              • noClip: Não corta as figuras e textos que ultrapassam o retângulo.
              • noFontFallBack: Transforma as fontes que não existem em quadrados vazios
              • noWrap: uma so linha

segunda-feira, 20 de setembro de 2010

MCTS536 - Cap. 5 - Serialization(System.RunTime.Serialization)

·        Definição: Trata-se da conversão do objeto em binário, SOAP, ou XML.
·        Serializando:
o       Cria-se um stream
o       Instancia-se um BinaryFormatter, parte do System.RunTime.Serialization.Formatters.Binary
o       Usa o objeto instanciado BinaryFormatter, para serializar
·        Deserializado:
o       É o caminho inverso da serialização
·        Criando uma classe serializavel
o       Utilização do atributo serializable
o       Por default, outros códigos  podem acessar ou modificar instancias de objetos serializados, mas classes obtidas da internet ou de terceiros, são protegidas pela classe Security Permission
·        Desabilitando a serialização de alguns membros
o       A serialização de membros calculados ocupam mais espaço do que se não estivessem serializado, por isso devemos atribuir o [NonSerialized] a esse membro especifico
o       Com esse atributo, os campos NonSerialized são omitidos e não calculados, logo devemos utilizar a interface IDeserializationCallBack e implementar a Sub IdeserializationCallBack_OnDeserialization para faze-lo. Desse modo o cálculo do objeto somente é feito no momento da deserialiazacao
·        Compatibilidade de algumas versões
o       Objetos serializados devem acompanhar as versões da aplicação.
o       Para evitar esse problemas precisamos ativar a serialização default on

o       OptionalField: Este componete evita que os novos componentes da versão dêem erros, atribuindo para eles o valor de null

o       Dicas para problemas de versão
§         Nunca remova um campo serializavel
§         Nunca atribua o NonSerializedAttribute para quem nunca teve
§         Nunca troque o nome de uma campo serializeble
§         Se colocar o um campo novo colocar o atributo OptionalField.
o       Formatos de serialização
§         binaryFormatter: Ótimo para ser usado com o Framework .NET
§         SOAPFormatter: Transforma em XML, pode ser utilizado por outras tecnologias, é melhor aceito pelos firewalls. Ë muito maior que o binário
o       Controlando uma serialização SOAP
§         Atributos
·        SOAPAtributte: Usado em campos públicos, propriedades, parâmetros ou valores de retorno serializando-os como XML. Trata Atributos
·        SOAPElement: Usado em campos públicos, propriedades, parâmetros ou valores de retorno, serializando-os como XML. Trata elementos.
·         AtributoXElemeto: Atributo fazem parte de elementos
·        SOAPEnum: Campo Público que é parte de um Enum. Serializado com o nome de um elemento enum
·        SOAPIgnore: Usado em propriedades e campos públicos. Esses campos serão ignorados quando a classe for serializada
·        SOAPInclude: Usado em classes herdadas e declaração publica de webservices
o       Dicas de Serialização
§         Na duvida marque com serializavel, um dia pode ser necessário
§         Marque temporáro e membros calculados com nonserialized
§         soapFormatter: Portabilidade
§         binaryFormatter: Eficiência
XML (System.XML.Serialization)(Serializacao)
  • Condicoes para uma classe serializável por XML:
    • Seja pública, os métodos a serem serializados sejam publicos e seu construtor não tenha parâmetros
  • Atributos
    • XMLAnyAttribute: Usado em campos, propriedades, parâmetros ou valores de retorno publicos que utilizem um array de objetos XMLAttributes. Quando deserializavel, o array será preenchido com os XMLAtrtibutes que representarão todos os objetos deste tipo desconhecidos ao schema
    • XMLAnyElement: Igual ao dos atributos so que para elementos
    • XMLArray: Usado em campos, propriedades, parâmetros ou valores de retorno publicos que utilizem um array de objetos complexos. Os membros do array serão gerados como membros de um array XML.
    • XMLArrayItem: Mesmo uso do XMLArray. Os tipos herdados podem ser inseridos num array
    • XMLAttribute: Usado em campos públicos, propriedades, parâmetros, ou ainda valores de retorno. Esse atributo será serializado como um atributo XML
    • XMLChoiceIdentifier: Utilizados nos mesmo tipos descritos anteriormente. O membro será utilizado em um enum.
    • XMLElement: Usado em campos públicos, propriedades, parâmetros, ou ainda valores de retorno. Esse atributo será serializado como um elemento XML
    • XMLEnum: Utilizado em um campo publico que seja um enum. O nome do Enum será deserializado.
    • XMLIgnore:Usado nos mesmos tipos descritos anteriormente. Ignora esses campos
    • XMLRoot: Usado no webservices. Usado para especificação de namespaces e nome do elemento
    • XMLText: Propriedades e campos públicos. Serializado com um texto XML
    • XMLType: Declaracoa de classes pública. O nome e o namespace de um tipo XML
  • Utilizando Padroes de XML
    • Já existem padrões para download
    • Comando para atualização:
      • Xsd c:\Schema\library.xsd \classes \language:cd, no prompt do visual studio
  • Serializacao Controlada
    • A customizacao de uma serializacao implica necessariamente em implementar o método getObjectDate, usado na serialização, e o construtor (new), usado na desearilizacao. Esse processo e sempre utilizado com a interface ISerializable.
    • Método getObjectData: Nesse método os valores a serem serializados são incluídos os valores a serem serializados e os nomes usados para estes variaveis que conterão esses valores.
    • Estes nomes são partes de um objeto de um objeto chamado SerializationInfo e são preenchidos pelo método addValue
    • Este objeto é recebido com parâmetro deste método addValue.
    • Na deserializacao, quando é usado o construtor, um objeto do tipo SerializationInfo também é parâmetro e suas informações obtidas através dos métodos Get
    • Eventos da Serialização (Apenas para Serialização binaria)
      • Serializing: Ativado antes da serializacao, Necessita do atributo onSerializing
      • Serialized: Ativado logo Após a serialização. Necessita do atributo onSerialized
      • Deserializing: Ativado antes da deserializacao. Necessita do atributo onDeserializing
      • Deserialized: Ativado logo após a deserializacao e depois do IdeserializationCallBack.OnDeserialization ser chamado este método é chamado quando outras serializações são usadas no binaryFormatter.
      • Streams de serialização não podem ser acessados por estes eventos, mas os objetos podem ser alterados neste momento
      • Para que estes eventos realmente funcionem e necessário que exista no método streamingContext como parâmetro.

quinta-feira, 16 de setembro de 2010

MCTS-536 - Cap 4 - Colecoes e Generics

o       SortedList
o       Ë igual ao dictionary, porém ordenado
o       Propriedades         
§         capacity: Número de itens alocados atualmente na lista
§         containsKey: Verifica a existência de uma chave
§         containsValue: Verifica a existência de uma valor
§         getByIndex: Pega os valores através do índice
§         getKey: Retorna a chave do índice relativo
§         getKeyList: Retorna a Lista ordenada de chaves
§         getValueList: Retorna a Lista de Valores
§         indexOfKey: Retorna o Índice da chave
§         índexOfValue: Retorna o índice da primeira ocorrência daquele valor.
§         removeAt: Retorna um valor específico da coleção através de um índice
§         setByIndex: Troca o valor no índice
§         trimToSize: Libera o espaço não utilizado
o       Specillized Dictionaries
o       ListDictionary: Útil para pequenas coleções pois otimiza a performance
o       Hybrid Dictionary: É uma ListDictionary que quando necessário cresce para uma HashTable
o       OrderedTable: É uma HashTable que tem acesso pelo índice
o       Specillized Collections (System.collection.Speciallized)
o       Coleções para se trabalhar com bits
§         BitArray:
a.       Redimensionável, porém não dinamicamente
b.      Não suporta add, remove, so aceita os valores true ou false
c.       Em sua criação todos os valores são falsos
d.      Acesso aos valores pelo índice
e.       Opera operações and, or, xor entre colecoe do mesmo tipo, colocando seu resultado em outro array
§         BitArray32:
f.        Ideal para se trabalhar com muitos componentes
g.       Guarda Tudo num inteiro de 32 bits
h.       data: Retorna o valor desse inteiro
i.         createMask: Cria um inteiro deste tipo
j.        bitPacking: Agrupa vários números no valor de um inteiro
o       Coleções para se trabalhar com strings
§         Denominado StringCollection, nada mais é que que um ArrayList de strings
§         Quando adicionados itens não strings dá erro
§         Não necessita a transformação para string
§         StringDictionary: É uma HashTable para strings, tanto para os indices quanto para os valores.
§         CollectionUtil: É uma biblioteca do framework, que tem entre seus métodos, o createInsensitiveHashTable, e o createCaseInsensitiveSortedList, que tratam caixas altas e baixas.
§         StringComparer: Compara as strings independente da informação cultural
o        NameValueCollection (System.collection.Specillized) NameValueCollection): PArece a String Dictionary, mas é possível de se acessar pelo indice e de se ter chaves com mais de um valor, adicionadas utilizando o commando add.
o       GenericsCollection
§         Generics: São tipos criados para receberem como parâmetro qualquer tipo. Esse parâmetro e declarado da forma <varariável>, e na hora de instanciar um destes objetos é necessário informar o tipo.
§         Todas as coleções tem seu equivalente me generics
a.       ArrayList – List <>
b.      Queue – Queue<>
c.       Stack – Stack<>
d.      HashTable-Dictionary<>
e.       SortedList – SortedList<>
f.        ListDictionary – Dictionary<>
g.       HybridDictionary – Dictionary<>
h.       OrderedDictionary – Dictionary<>
i.         SortedDictionary – Dictionary<>
j.        NameValueCollection – Dictionary<>
k.      DictionaryEntry – NameValuePair<>
l.         StringCollection – List<String>
m.     StringCollection – Dictionary<String>
n.       Não tem relação - LinkedList<>

·        List<> -
o       Generics Delegate: São declarados daqui seguinte forma:
§         Public int Comparison<TipoGenerico> (Tx,Ty)
·        Queue<>, Stack <> -  Como os originais, só que se limitam aos tipos declarados
·        GenericsDictionary<>: Diferencia-se do original somente pelo tipo de reotrno, antes era DictionaryEntry, agora KeyValuePair, resguardando a declaraco dos parâmetros.
·        SortedList<>, SortedDictionary<> : Igual ao original
·        LinkedList: Tem a mesma idéia dos ponteiro, com apontadores e tal
o       Propriedades:
§         Count: Numero de componentes
§         First: Primeiro nó
§         Last: último nó
o       Métodos
§         addAfter: Coloca depois de um certo nó
§         addBefore: Coloca antes de um nó
§         addFirst: Coloca no Inicio
§         addLast: Coloca no Fim
§         clear: Apaga Tudo
§         contains: Verifica a existência
§         copyTo: Copia tudo prum array     
§         find: Acha o primeiro contendo o valor
§         findLast: Acha o ultimo nó contendo o valor
§         remove:  Remove pelo conteúdo ou pelo índice
§         removeFirst: Remove o primeiro
§         removeLast: Remove o último
§         linkedNode: É cada item da LinkedList
·        list: A lista de onde pertence o nó
·        next: O próximo nó da lista
·        previous: O nó anterior
·        value: O valor do nó
§         LinkedList: É uma composição de linked nodes