msdn webcast: trabalhando com covariância e contravariância no c# 4

15
Trabalhando com covariância e contravariância no C# 4 Rogério Moraes de Carvalho Consultor e Instrutor de TI VITA Informática Twitter: @ rogeriomc quinta-feira, 30 de setembro de 2010

Upload: rogerio-moraes-de-carvalho

Post on 24-May-2015

3.068 views

Category:

Technology


2 download

DESCRIPTION

Introdução a conceitos de programação orientada a objetos com a linguagem C#. Apresentação dos problemas do suporte a covariância em arrays. Explicação do novo suporte a covariância e contravariância em tipos genéricos, introduzido na versão 4 da linguagem C#.

TRANSCRIPT

Page 1: MSDN Webcast: Trabalhando com covariância e contravariância no C# 4

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

Page 2: MSDN Webcast: Trabalhando com covariância e contravariância no C# 4

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

Page 3: MSDN Webcast: Trabalhando com covariância e contravariância no C# 4

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

Page 4: MSDN Webcast: Trabalhando com covariância e contravariância no C# 4

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

Page 5: MSDN Webcast: Trabalhando com covariância e contravariância no C# 4

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

Page 6: MSDN Webcast: Trabalhando com covariância e contravariância no C# 4

demo

Page 7: MSDN Webcast: Trabalhando com covariância e contravariância no C# 4

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

Page 8: MSDN Webcast: Trabalhando com covariância e contravariância no C# 4

demo

Page 9: MSDN Webcast: Trabalhando com covariância e contravariância no C# 4

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>

Page 10: MSDN Webcast: Trabalhando com covariância e contravariância no C# 4

demo

Page 11: MSDN Webcast: Trabalhando com covariância e contravariância no C# 4

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>

Page 12: MSDN Webcast: Trabalhando com covariância e contravariância no C# 4

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>, ...

Page 13: MSDN Webcast: Trabalhando com covariância e contravariância no C# 4

demo

Page 14: MSDN Webcast: Trabalhando com covariância e contravariância no C# 4

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

Page 15: MSDN Webcast: Trabalhando com covariância e contravariância no C# 4

© 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.