Vou deixar aqui mais uma pegadinha de C#, desta vez C# 4. Como das outras vezes, não vale usar o Visual Studio 2010 para checar a resposta antes de responder. Depois tudo bem!

Dado o seguinte código:

static int Funcao(int z) { return 1; }
 
static void Main()
{
   dynamic x = 3;
   DateTime y = Funcao(x);
}

O que deve acontecer?

  1. Não compila: tenho um erro em tempo de compilação na linha 6;
  2. Compila e em tempo de execução o inteiro é convertido para uma data usando uma conversão implícita no DLR;
  3. Compila e o inteiro é convertido para uma data usando uma conversão explícita do CLR, mas em tempo de compilação, com IL gerada pelo compilador na chamada da função;
  4. Compila mas tenho um erro em tempo de execução na linha 6, porque não é possível converter um inteiro para uma data.

A resposta vem na quinta-feira.


Postado na(s) categoria(s) C# pelo giovanni bassi em 14 de julho de 2009 às 00:44 | Tags: ,

Comentários


julho 14. 2009 01:18
Andre Dias
Como eu não tenho certeza, vamos lá:
1) É a que eu gostaria que fosse.
2) Oh my God! Isso me lembra VB6, algo do tipo Dim b as Boolean = -1 Smile
3) Pelo trabalho que você gastou para explicar deve ser essa, mas a primeira vista não gostei muito.
4) Eu acho pouco provável, esse tipo de informação dá pra obter em tempo de compilação.

Fiquei entre 1 e 3. E como gosto das coisas simples vou de 1 Smile

http://blogs.msdn.com/andrediashttp://blogs.msdn.com/andredias


julho 14. 2009 01:21
Diogo Damiani Ferreira
Vamos lá!

Bem, de acordo com o dinamismo, se x é dinâmico, todo o resto (Funcao, y) vai ser tratado como dinâmico. Logo, compila! #Opcao1e3Fail

Agora a conversão de inteiro para DateTime não é possível. Logo, a correta é a 4.

Acho que é isso! Se falei alguma besteira me corrijam, por favor. Smile

Abraços!

http://diogodamiani.com.br/http://diogodamiani.com.br/


julho 14. 2009 06:40
Felipe Fujiy
Acredito que seja a opcao 4

http://blog.fujiy.net/http://blog.fujiy.net/


Brazil Chan
julho 14. 2009 08:48
Chan
Bem como o Andre disse, eu tb gostaria que fosse a 1.
Mas acho que fico com a 4 como o Diogo falou.

no site


Brazil Emerson
julho 14. 2009 10:08
Emerson
Acredito que a opção 4 é a correta, pois irá gerar um erro de execução

no site


Brazil Frederico Maia
julho 14. 2009 15:14
Frederico Maia
Também acredito que seja a 1.

no site


julho 14. 2009 15:29
Higor
Fico com a opção 4

http://www.higorcesar.com/http://www.higorcesar.com/


Brazil Leandro
julho 14. 2009 22:04
Leandro
Bom, eu também fico a opção 1, o compilador tem toda a informação para dar erro em compile time =D

no site


julho 14. 2009 23:35
Diogo Damiani Ferreira
Leandro,

Aí é que está a essência do dinamismo. Como o x está definido com o tipo dynamic, o código que utiliza o x é tratado como dinâmico. Isso, teoricamente (pode ser que eu esteja forçando um pouco), é como se o compilador nem tomasse conhecimento desse código.

Logo a primeira opção é descartada. Como disse antes, fico com a 4.

O Giovanni com certeza vai explicar isso melhor que eu! rs.

Aproveitando, talvez alguém ainda não tenha visto, segue o link para a palestra do Anders Hejlsberg no PDC 2008 sobre C# 4.0. http://bit.ly/187XPQ

Até!

http://diogodamiani.com.br/http://diogodamiani.com.br/


Brazil Leandro
julho 15. 2009 10:13
Leandro
Diogo, até entendo que talvez minha resposta não seja a correta, até mesmo por ser uma pegadinha, mas a minha esperança é que o C# tenha juntado o melhor dos 2 mundos, a checagem em "compile time" para o código que foi tipado estaticamente e a checagem em runtime somente nos objetos tipados como dynamic.
Se a DLR afetar todo o código envolvido numa operação com um objeto dynamic ignorando a tipagem estática aí eu já não sei o que pensar sobre o dynamic, eu achava ele bem positivo, mas com essa sua afirmação vou ter que repensar bem antes de utilizá-lo, pode ser bem perigoso.

no site


Brazil Fabiano
julho 17. 2009 16:38
Fabiano
Desejo que seja a opção 1. Pois se for a opção 4, acredito que o .NET (C#) está indo para um caminho que realmente não me agrada.

no site


julho 23. 2009 12:08
Joe Rodeo
Do you accept guest posts? I would love to write couple articles here.

http://discountwatchshop.biz/http://discountwatchshop.biz/


dezembro 24. 2009 00:32
pingback
Pingback from unplugged.giggio.net

Rodando Ruby com C#: Parte 1

http://unplugged.giggio.net/unplugged/post/Rodando-Ruby-com-C-Parte-1.aspxhttp://unplugged.giggio.net/unplugged/post/Rodando-Ruby-com-C-Parte-1.aspx

Comentar


(Vai mostrar seu Gravatar)

  Country flag

biuquote
  • Comentário
  • Pré-visualização
Loading



Quem é Giovanni Bassi

Giovanni Bassi Sou uma pessoa apaixonada por tecnologia e especificamente por .Net. Sou consultor independente especialista em .Net, focado em arquitetura e melhores práticas. Tenho dezenas de artigos publicados na .Net Magazine, revista da qual sou editor técnico. Ministro palestras e cursos de vez em quando, e quando dá tempo eu respiro um pouco. Mais detalhes nesta página.

Busca

Selos

Eu vou ao TechEd Brasil 2010, e você?

MVP

MCPD

MCSD

.Net Magazine

Abaixo ao if!

Calendário

«  julho 2010  »
seteququsedo
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678
Ver detalhamento de posts no calendário

Blogs interessantes

    OPMLDownload OPML file

    Postagens recentes

    Comentários recentes

    Disclaimer / Aviso
    As opiniões colocadas neste blog são minhas e pessoais e não expressam necessariamente as opiniões de meus empregadores, pareceiros e amigos. Da mesma forma, os comentários feitos por leitores do blog não expressam a minha opinião.

    © Copyright 2010 .Net Unplugged
    Log in