SlideShare uma empresa Scribd logo
1 de 15
quinta-feira, 30 de setembro de 2010 Trabalhando com covariânciae contravariância no C# 4  RogérioMoraes de Carvalho Consultor e Instrutor de TI VITA Informática Twitter: @rogeriomc
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 2
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 3
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 4
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 5
demo
Covariância em arraysArrayssuportam 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 arraysde 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 7
demo
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> 9
demo
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> 11
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>, ... 12
demo
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ídeopor 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ídeopor 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 14
© 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.

Mais conteúdo relacionado

Mais procurados

Paradigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e FuncionalParadigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e FuncionalGustavo Coutinho
 
Tecnicas programacao i_c_p5
Tecnicas programacao i_c_p5Tecnicas programacao i_c_p5
Tecnicas programacao i_c_p5D M
 
Code Smells: o que eles dizem sobre seu código?
Code Smells: o que eles dizem sobre seu código?Code Smells: o que eles dizem sobre seu código?
Code Smells: o que eles dizem sobre seu código?Elaine Naomi
 
Critérios de avaliação de linguagens
Critérios de avaliação de linguagensCritérios de avaliação de linguagens
Critérios de avaliação de linguagensPaulo Muniz
 
C sharp feup10set2001
C sharp feup10set2001C sharp feup10set2001
C sharp feup10set2001leojr_0
 
Apresentação java
Apresentação javaApresentação java
Apresentação javamunosai
 
Linguagem C 01 - Tópicos Introdutórios
Linguagem C 01 - Tópicos IntrodutóriosLinguagem C 01 - Tópicos Introdutórios
Linguagem C 01 - Tópicos IntrodutóriosFabio Spanhol
 
Linguagem C (UFRPE)
Linguagem C (UFRPE)Linguagem C (UFRPE)
Linguagem C (UFRPE)guest14543db
 
IES GF - Linguagem de Programação Estruturada - Parte 1
IES GF - Linguagem de Programação Estruturada - Parte 1IES GF - Linguagem de Programação Estruturada - Parte 1
IES GF - Linguagem de Programação Estruturada - Parte 1Ramon Mayor Martins
 
Java cert programmer
Java cert programmerJava cert programmer
Java cert programmerRegis Melo
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaFernando Camargo
 
Apostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cApostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cMaicon Rodrigues
 

Mais procurados (19)

Paradigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e FuncionalParadigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e Funcional
 
Tecnicas programacao i_c_p5
Tecnicas programacao i_c_p5Tecnicas programacao i_c_p5
Tecnicas programacao i_c_p5
 
Introducao ao .Net
Introducao ao .NetIntroducao ao .Net
Introducao ao .Net
 
01 aula1 habib
01 aula1 habib01 aula1 habib
01 aula1 habib
 
1.1.paradigmas
1.1.paradigmas1.1.paradigmas
1.1.paradigmas
 
Code Smells: o que eles dizem sobre seu código?
Code Smells: o que eles dizem sobre seu código?Code Smells: o que eles dizem sobre seu código?
Code Smells: o que eles dizem sobre seu código?
 
Apostila de dev
Apostila de devApostila de dev
Apostila de dev
 
Critérios de avaliação de linguagens
Critérios de avaliação de linguagensCritérios de avaliação de linguagens
Critérios de avaliação de linguagens
 
C sharp feup10set2001
C sharp feup10set2001C sharp feup10set2001
C sharp feup10set2001
 
Apresentação java
Apresentação javaApresentação java
Apresentação java
 
Linguagem C 01 - Tópicos Introdutórios
Linguagem C 01 - Tópicos IntrodutóriosLinguagem C 01 - Tópicos Introdutórios
Linguagem C 01 - Tópicos Introdutórios
 
Linguagem C (UFRPE)
Linguagem C (UFRPE)Linguagem C (UFRPE)
Linguagem C (UFRPE)
 
IES GF - Linguagem de Programação Estruturada - Parte 1
IES GF - Linguagem de Programação Estruturada - Parte 1IES GF - Linguagem de Programação Estruturada - Parte 1
IES GF - Linguagem de Programação Estruturada - Parte 1
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
 
Java cert programmer
Java cert programmerJava cert programmer
Java cert programmer
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em Java
 
Apostila de dev
Apostila de devApostila de dev
Apostila de dev
 
Apostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-cApostila de-introdução-à-linguagem-c
Apostila de-introdução-à-linguagem-c
 
Paradigmas de programação
Paradigmas de programaçãoParadigmas de programação
Paradigmas de programação
 

Destaque

TDC 2016 POA: O novo ASP.NET Core 1.0 multiplataforma
TDC 2016 POA: O novo ASP.NET Core 1.0 multiplataformaTDC 2016 POA: O novo ASP.NET Core 1.0 multiplataforma
TDC 2016 POA: O novo ASP.NET Core 1.0 multiplataformaRogério Moraes de Carvalho
 
Microsoft Community Launch 2010: .NET Framework 4
Microsoft Community Launch 2010: .NET Framework 4Microsoft Community Launch 2010: .NET Framework 4
Microsoft Community Launch 2010: .NET Framework 4Rogério Moraes de Carvalho
 
Visual Studio Summit 2016: C# 7 - Olhando para o futuro
Visual Studio Summit 2016: C# 7 - Olhando para o futuroVisual Studio Summit 2016: C# 7 - Olhando para o futuro
Visual Studio Summit 2016: C# 7 - Olhando para o futuroRogério Moraes de Carvalho
 
dotnetConf 2016 Goiânia: .NET Core | ASP.NET Core
dotnetConf 2016 Goiânia: .NET Core | ASP.NET CoredotnetConf 2016 Goiânia: .NET Core | ASP.NET Core
dotnetConf 2016 Goiânia: .NET Core | ASP.NET CoreRogério Moraes de Carvalho
 
Microsoft Tech·Ed Brasil 2010: DEV302 - Como e onde devo utilizar o Managed E...
Microsoft Tech·Ed Brasil 2010: DEV302 - Como e onde devo utilizar o Managed E...Microsoft Tech·Ed Brasil 2010: DEV302 - Como e onde devo utilizar o Managed E...
Microsoft Tech·Ed Brasil 2010: DEV302 - Como e onde devo utilizar o Managed E...Rogério Moraes de Carvalho
 
Um novo .NET multiplataforma: ASP.NET Core, .NET Core e Entity Framework Core
Um novo .NET multiplataforma:ASP.NET Core, .NET Core e Entity Framework CoreUm novo .NET multiplataforma:ASP.NET Core, .NET Core e Entity Framework Core
Um novo .NET multiplataforma: ASP.NET Core, .NET Core e Entity Framework CoreRogério Moraes de Carvalho
 

Destaque (8)

TDC 2016 POA: O novo ASP.NET Core 1.0 multiplataforma
TDC 2016 POA: O novo ASP.NET Core 1.0 multiplataformaTDC 2016 POA: O novo ASP.NET Core 1.0 multiplataforma
TDC 2016 POA: O novo ASP.NET Core 1.0 multiplataforma
 
Microsoft Community Launch 2010: .NET Framework 4
Microsoft Community Launch 2010: .NET Framework 4Microsoft Community Launch 2010: .NET Framework 4
Microsoft Community Launch 2010: .NET Framework 4
 
Visual Studio Summit 2016: C# 7 - Olhando para o futuro
Visual Studio Summit 2016: C# 7 - Olhando para o futuroVisual Studio Summit 2016: C# 7 - Olhando para o futuro
Visual Studio Summit 2016: C# 7 - Olhando para o futuro
 
Educação e certificação na Plataforma .NET
Educação e certificação na Plataforma .NETEducação e certificação na Plataforma .NET
Educação e certificação na Plataforma .NET
 
dotnetConf 2016 Goiânia: .NET Core | ASP.NET Core
dotnetConf 2016 Goiânia: .NET Core | ASP.NET CoredotnetConf 2016 Goiânia: .NET Core | ASP.NET Core
dotnetConf 2016 Goiânia: .NET Core | ASP.NET Core
 
Microsoft Tech·Ed Brasil 2010: DEV302 - Como e onde devo utilizar o Managed E...
Microsoft Tech·Ed Brasil 2010: DEV302 - Como e onde devo utilizar o Managed E...Microsoft Tech·Ed Brasil 2010: DEV302 - Como e onde devo utilizar o Managed E...
Microsoft Tech·Ed Brasil 2010: DEV302 - Como e onde devo utilizar o Managed E...
 
Docker com ASP.NET Core e Hospedagem no Azure
Docker com ASP.NET Core e Hospedagem no AzureDocker com ASP.NET Core e Hospedagem no Azure
Docker com ASP.NET Core e Hospedagem no Azure
 
Um novo .NET multiplataforma: ASP.NET Core, .NET Core e Entity Framework Core
Um novo .NET multiplataforma:ASP.NET Core, .NET Core e Entity Framework CoreUm novo .NET multiplataforma:ASP.NET Core, .NET Core e Entity Framework Core
Um novo .NET multiplataforma: ASP.NET Core, .NET Core e Entity Framework Core
 

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

Orientação a Objetos para Desenvolvedores Android
Orientação a Objetos para Desenvolvedores AndroidOrientação a Objetos para Desenvolvedores Android
Orientação a Objetos para Desenvolvedores AndroidIury Teixeira
 
Curso Básico de Java - Aula 4
Curso Básico de Java - Aula 4Curso Básico de Java - Aula 4
Curso Básico de Java - Aula 4PeslPinguim
 
Community Launch 2010 - Novos recursos C# 4.0
Community Launch 2010 - Novos recursos C# 4.0Community Launch 2010 - Novos recursos C# 4.0
Community Launch 2010 - Novos recursos C# 4.0Felipe Borges
 
Curso De Hibernate 3
Curso De Hibernate 3Curso De Hibernate 3
Curso De Hibernate 3Joel Lobo
 
Object Oriented Programming
Object Oriented Programming Object Oriented Programming
Object Oriented Programming Alexandre Schmidt
 
Programação Orientada a Objeto(POO)
Programação Orientada a Objeto(POO)Programação Orientada a Objeto(POO)
Programação Orientada a Objeto(POO)Carlos Alberto
 
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...Rogério Moraes de Carvalho
 
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...Rogério Moraes de Carvalho
 
Aula 03 - Classes math e string - JAVA
Aula 03   - Classes math e string - JAVAAula 03   - Classes math e string - JAVA
Aula 03 - Classes math e string - JAVAULBRA
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Natanael Fonseca
 
Minicurso Ruby on Rails Dextra
Minicurso Ruby on Rails DextraMinicurso Ruby on Rails Dextra
Minicurso Ruby on Rails DextraDextra
 

Semelhante a MSDN Webcast: Trabalhando com covariância e contravariância no C# 4 (20)

Orientação a Objetos para Desenvolvedores Android
Orientação a Objetos para Desenvolvedores AndroidOrientação a Objetos para Desenvolvedores Android
Orientação a Objetos para Desenvolvedores Android
 
Virada Tecnológica 2017
Virada Tecnológica 2017Virada Tecnológica 2017
Virada Tecnológica 2017
 
Introdução ao Entity Framework 4
Introdução ao Entity Framework 4Introdução ao Entity Framework 4
Introdução ao Entity Framework 4
 
dotNet framework foundation
dotNet framework foundationdotNet framework foundation
dotNet framework foundation
 
Curso Básico de Java - Aula 4
Curso Básico de Java - Aula 4Curso Básico de Java - Aula 4
Curso Básico de Java - Aula 4
 
Community Launch 2010 - Novos recursos C# 4.0
Community Launch 2010 - Novos recursos C# 4.0Community Launch 2010 - Novos recursos C# 4.0
Community Launch 2010 - Novos recursos C# 4.0
 
Java 04
Java 04Java 04
Java 04
 
Curso De Hibernate 3
Curso De Hibernate 3Curso De Hibernate 3
Curso De Hibernate 3
 
Object Oriented Programming
Object Oriented Programming Object Oriented Programming
Object Oriented Programming
 
Artigo c#
Artigo c#Artigo c#
Artigo c#
 
Programação Orientada a Objeto(POO)
Programação Orientada a Objeto(POO)Programação Orientada a Objeto(POO)
Programação Orientada a Objeto(POO)
 
Programação Defensiva
Programação DefensivaProgramação Defensiva
Programação Defensiva
 
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
 
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
 
Unidade04
Unidade04Unidade04
Unidade04
 
Aula 03 - Classes math e string - JAVA
Aula 03   - Classes math e string - JAVAAula 03   - Classes math e string - JAVA
Aula 03 - Classes math e string - JAVA
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Minicurso Ruby on Rails Dextra
Minicurso Ruby on Rails DextraMinicurso Ruby on Rails Dextra
Minicurso Ruby on Rails Dextra
 
Java sintaxe
Java sintaxeJava sintaxe
Java sintaxe
 

Mais de Rogério Moraes de Carvalho

ASP.NET Core, .NET Core e EF Core: multiplataforma e otimizados para a nuvem
ASP.NET Core, .NET Core e EF Core: multiplataforma e otimizados para a nuvemASP.NET Core, .NET Core e EF Core: multiplataforma e otimizados para a nuvem
ASP.NET Core, .NET Core e EF Core: multiplataforma e otimizados para a nuvemRogério Moraes de Carvalho
 
Explorando o novo .NET multiplataforma: ASP.NET Core, .NET Core e EF Core
Explorando o novo .NET multiplataforma:ASP.NET Core, .NET Core e EF CoreExplorando o novo .NET multiplataforma:ASP.NET Core, .NET Core e EF Core
Explorando o novo .NET multiplataforma: ASP.NET Core, .NET Core e EF CoreRogério Moraes de Carvalho
 
Plataforma de compiladores .NET, Visual Studio 2015, C# 6 e futuro C# 7
Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7
Plataforma de compiladores .NET, Visual Studio 2015, C# 6 e futuro C# 7Rogério Moraes de Carvalho
 
The Developer’s Conference (TDC) 2015 Florianópolis: O Entity Framework 7 na ...
The Developer’s Conference (TDC) 2015 Florianópolis: O Entity Framework 7 na ...The Developer’s Conference (TDC) 2015 Florianópolis: O Entity Framework 7 na ...
The Developer’s Conference (TDC) 2015 Florianópolis: O Entity Framework 7 na ...Rogério Moraes de Carvalho
 
MVP Virtual Conference (MVP V-Conf) 2015: Executando ASP.NET MVC 6 no Mac OS ...
MVP Virtual Conference (MVP V-Conf) 2015: Executando ASP.NET MVC 6 no Mac OS ...MVP Virtual Conference (MVP V-Conf) 2015: Executando ASP.NET MVC 6 no Mac OS ...
MVP Virtual Conference (MVP V-Conf) 2015: Executando ASP.NET MVC 6 no Mac OS ...Rogério Moraes de Carvalho
 
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015Rogério Moraes de Carvalho
 
Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”
Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”
Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”Rogério Moraes de Carvalho
 
Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...
Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...
Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...Rogério Moraes de Carvalho
 
Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...
Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...
Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...Rogério Moraes de Carvalho
 
Uma visão de mercado das linguagens de programação
Uma visão de mercado das linguagens de programaçãoUma visão de mercado das linguagens de programação
Uma visão de mercado das linguagens de programaçãoRogério Moraes de Carvalho
 
SQLSaturday #253 | Brasília 2013 - Mapeamento Objeto-Relacional com o Entity ...
SQLSaturday #253 | Brasília 2013 - Mapeamento Objeto-Relacional com o Entity ...SQLSaturday #253 | Brasília 2013 - Mapeamento Objeto-Relacional com o Entity ...
SQLSaturday #253 | Brasília 2013 - Mapeamento Objeto-Relacional com o Entity ...Rogério Moraes de Carvalho
 
HTML5 + CSS3 em múltiplos browsers, em múltiplas plataformas e em múltiplos d...
HTML5 + CSS3 em múltiplos browsers, em múltiplas plataformas e em múltiplos d...HTML5 + CSS3 em múltiplos browsers, em múltiplas plataformas e em múltiplos d...
HTML5 + CSS3 em múltiplos browsers, em múltiplas plataformas e em múltiplos d...Rogério Moraes de Carvalho
 
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...Rogério Moraes de Carvalho
 
The Developer's Conference (TDC) 2013 - Florianópolis: HTML5 + CSS3 em múlti...
The Developer's Conference (TDC) 2013 - Florianópolis:  HTML5 + CSS3 em múlti...The Developer's Conference (TDC) 2013 - Florianópolis:  HTML5 + CSS3 em múlti...
The Developer's Conference (TDC) 2013 - Florianópolis: HTML5 + CSS3 em múlti...Rogério Moraes de Carvalho
 
MVP Virtual Conference 2013: Cenário do mundo real
MVP Virtual Conference 2013: Cenário do mundo realMVP Virtual Conference 2013: Cenário do mundo real
MVP Virtual Conference 2013: Cenário do mundo realRogério Moraes de Carvalho
 
MVP Virtual Conference 2013: Suporte a padrões Web
MVP Virtual Conference 2013: Suporte a padrões WebMVP Virtual Conference 2013: Suporte a padrões Web
MVP Virtual Conference 2013: Suporte a padrões WebRogério Moraes de Carvalho
 

Mais de Rogério Moraes de Carvalho (20)

Tecnologias XML e XML no SQL Server 2016
Tecnologias XML eXML no SQL Server 2016Tecnologias XML eXML no SQL Server 2016
Tecnologias XML e XML no SQL Server 2016
 
Cebraspe 2016: .NET Core e ASP.NET Core
Cebraspe 2016: .NET Core e ASP.NET CoreCebraspe 2016: .NET Core e ASP.NET Core
Cebraspe 2016: .NET Core e ASP.NET Core
 
ASP.NET Core, .NET Core e EF Core: multiplataforma e otimizados para a nuvem
ASP.NET Core, .NET Core e EF Core: multiplataforma e otimizados para a nuvemASP.NET Core, .NET Core e EF Core: multiplataforma e otimizados para a nuvem
ASP.NET Core, .NET Core e EF Core: multiplataforma e otimizados para a nuvem
 
Explorando o novo .NET multiplataforma: ASP.NET Core, .NET Core e EF Core
Explorando o novo .NET multiplataforma:ASP.NET Core, .NET Core e EF CoreExplorando o novo .NET multiplataforma:ASP.NET Core, .NET Core e EF Core
Explorando o novo .NET multiplataforma: ASP.NET Core, .NET Core e EF Core
 
Suporte XML nativo no SQL Server 2014/2016
Suporte XML nativo no SQL Server 2014/2016Suporte XML nativo no SQL Server 2014/2016
Suporte XML nativo no SQL Server 2014/2016
 
Plataforma de compiladores .NET, Visual Studio 2015, C# 6 e futuro C# 7
Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7Plataforma de compiladores .NET,Visual Studio 2015, C# 6 e futuro C# 7
Plataforma de compiladores .NET, Visual Studio 2015, C# 6 e futuro C# 7
 
The Developer’s Conference (TDC) 2015 Florianópolis: O Entity Framework 7 na ...
The Developer’s Conference (TDC) 2015 Florianópolis: O Entity Framework 7 na ...The Developer’s Conference (TDC) 2015 Florianópolis: O Entity Framework 7 na ...
The Developer’s Conference (TDC) 2015 Florianópolis: O Entity Framework 7 na ...
 
MVP Virtual Conference (MVP V-Conf) 2015: Executando ASP.NET MVC 6 no Mac OS ...
MVP Virtual Conference (MVP V-Conf) 2015: Executando ASP.NET MVC 6 no Mac OS ...MVP Virtual Conference (MVP V-Conf) 2015: Executando ASP.NET MVC 6 no Mac OS ...
MVP Virtual Conference (MVP V-Conf) 2015: Executando ASP.NET MVC 6 no Mac OS ...
 
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
 
Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”
Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”
Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”
 
Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...
Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...
Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...
 
Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...
Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...
Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DE...
 
Uma visão de mercado das linguagens de programação
Uma visão de mercado das linguagens de programaçãoUma visão de mercado das linguagens de programação
Uma visão de mercado das linguagens de programação
 
SQLSaturday #253 | Brasília 2013 - Mapeamento Objeto-Relacional com o Entity ...
SQLSaturday #253 | Brasília 2013 - Mapeamento Objeto-Relacional com o Entity ...SQLSaturday #253 | Brasília 2013 - Mapeamento Objeto-Relacional com o Entity ...
SQLSaturday #253 | Brasília 2013 - Mapeamento Objeto-Relacional com o Entity ...
 
`
``
`
 
HTML5 + CSS3 em múltiplos browsers, em múltiplas plataformas e em múltiplos d...
HTML5 + CSS3 em múltiplos browsers, em múltiplas plataformas e em múltiplos d...HTML5 + CSS3 em múltiplos browsers, em múltiplas plataformas e em múltiplos d...
HTML5 + CSS3 em múltiplos browsers, em múltiplas plataformas e em múltiplos d...
 
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
 
The Developer's Conference (TDC) 2013 - Florianópolis: HTML5 + CSS3 em múlti...
The Developer's Conference (TDC) 2013 - Florianópolis:  HTML5 + CSS3 em múlti...The Developer's Conference (TDC) 2013 - Florianópolis:  HTML5 + CSS3 em múlti...
The Developer's Conference (TDC) 2013 - Florianópolis: HTML5 + CSS3 em múlti...
 
MVP Virtual Conference 2013: Cenário do mundo real
MVP Virtual Conference 2013: Cenário do mundo realMVP Virtual Conference 2013: Cenário do mundo real
MVP Virtual Conference 2013: Cenário do mundo real
 
MVP Virtual Conference 2013: Suporte a padrões Web
MVP Virtual Conference 2013: Suporte a padrões WebMVP Virtual Conference 2013: Suporte a padrões Web
MVP Virtual Conference 2013: Suporte a padrões Web
 

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

  • 1. quinta-feira, 30 de setembro de 2010 Trabalhando com covariânciae contravariância no C# 4 RogérioMoraes de Carvalho Consultor e Instrutor de TI VITA Informática Twitter: @rogeriomc
  • 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 2
  • 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 3
  • 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 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 5
  • 7. Covariância em arraysArrayssuportam 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 arraysde 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 7
  • 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> 9
  • 10. 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> 11
  • 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>, ... 12
  • 13. 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ídeopor 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ídeopor 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 14
  • 15. © 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.