Post on 24-May-2015
description
Trabalhando com covariânciae contravariância no C# 4 Rogério Moraes de CarvalhoConsultor e Instrutor de TIVITA InformáticaTwitter: @rogeriomc
quinta-feira, 30 de setembro de 2010
2
Agenda do WebCastTópicos a serem apresentados− Hierarquia entre tipos de dados
− Demonstração− Covariância em arrays
− Demonstração− Tipos genéricos
− Demonstração− Variância em tipos genéricos
− Demonstração
3
Hierarquia entre tipos de dadosRelação de herança entre tipos de dados− Pilares da Programação Orientada a
Objetos− Encapsulamento
− Ocultar o máximo do comportamento e dos dados
− Herança− Permite criar uma nova classe, denominada
derivada, que reutiliza, estende e pode modificar o comportamento e os dados de uma classe base
− Polimorfismo− Habilidade de objetos de diferentes tipos de
dados serem manipulados usando interfaces comuns
4
Hierarquia entre tipos de dadosRelação de herança entre tipos de dados− Conceitos relacionados com herança
em C#− Classe abstrata (tipo por referência)
− Uma classe projetada somente para herança, ou seja, para outras classes derivarem dela
− Não pode ser instanciada com o operador new
− Seus membros abstratos devem ser implementados nas classes derivadas
− Interface (tipo por referência)− Definem contratos que devem ser
implementados− Similar a uma classe abstrata com todos os
membros abstratos− Porém, uma classe pode implementar múltiplas
interfaces, mas somente pode herdar de uma única classe abstrata
5
Hierarquia entre tipos de dadosRelação de herança entre tipos de dados− Conceitos relacionados com herança
em C#− Membros abstratos e virtuais
− Membros abstratos de uma classe abstrata base devem ser sobrescritos numa classe derivada concreta
− Membros virtuais numa classe base podem ser sobrescritos numa classe derivada− Fornecendo a sua própria implementação
− Membros virtuais também são chamados de polimórficos
− Membros que podem ser virtuais ou abstratos− Métodos, propriedades, indexadores ou eventos
demo
7
Covariância em arraysArrays suportam somente covariância− Sejam A e B dois tipos por referência
− Se uma conversão implícita ou explícita é possível entre os tipos A e B− Então esta mesma conversão será possível
entre arrays com elementos dos tipos A e B, respectivamente, e o mesmo número de dimensões
− Efeito colateral da covariância em arrays− Tipos arrays de tipos por referência
incluem verificação em tempo de execução para atribuição de elementos− Se a atribuição for inválida, então a exceção
System.ArrayTypeMismatchException é lançada
demo
9
Tipos genéricosConceito e aplicações− São tipos que tem parâmetros de tipo
para um ou mais dos tipos que eles armazenam ou usam− Tipos classes, estruturas, interfaces e
delegates podem ser genéricos− Além de tipos, membros métodos de um
tipo podem ser genéricos− Alguns tipos genéricos no .NET
Framework− Classe Dictionary<TKey, TValue>− Interface IList<T>
demo
11
Variância em tipos genéricosCovariância e contravariância em tipos genéricos− Se T aparece somente como uma
saída (out), então é seguro passarX<TDerivado> para X<TBase>− Este processo é chamado covariância− Sintaxe em C#: X<out T>
− Se T aparece somente como uma entrada (input), então é seguro passarX<TBase> para X<TDerivado>− Este processo é chamado contravariância
− Sintaxe em C#: X<in T>
12
Variância em tipos genéricosCovariância e contravariância em tipos genéricos− Em C# 3.0, tipos genéricos eram
invariantes− C# 4 suporta covariância e
contravariância em interfaces e delegates genéricos− Não suporta em classes e nem em
estruturas− À partir do .NET Framework 4,
diversas interfaces genéricas têm parâmetros de tipo − Covariantes
− IEnumerable<out T>, IQueryable<out T>, ...− Contravariantes
− IComparable<in T>, IComparer<in T>, ...
demo
14
Artigos e vídeos recomendadosMais informações sobre variância em C# 4− Array covariance
− http://msdn.microsoft.com/en-us/library/aa664572(VS.71).aspx
− How Do I: Use Covariance and Contravariance in VS 2010 Part I? (Vídeo por Eric Lippert, Microsoft Engineer)− http://msdn.microsoft.com/en-us/vcsharp/ee672314.aspx
− How Do I: Use Covariance and Contravariance in VS 2010 Part II? (Vídeo por Eric Lippert, Microsoft Engineer)− http://msdn.microsoft.com/en-us/vcsharp/ee672319.aspx
− Covariance and Contravariance (C# and Visual Basic)− http://msdn.microsoft.com/en-us/library/ee207183.aspx
− Covariance and Contravariance in Generics− http://msdn.microsoft.com/en-us/library/dd799517.aspx
© 2010 Microsoft Corporation. All rights reserved. Microsoft, MSDN, the MSDN logo, and [list other trademarks referenced] are trademarks of the Microsoft group of companies. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond
to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation.
MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED, OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.