csharp_4.0

Upload: galhardoro

Post on 08-Apr-2018

222 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/7/2019 CSharp_4.0

    1/6

    C# 4.0

    Por Fabiano Belmonte

    O Visual Studio 2010 e .NET Framework 4,0 em breve estar em fase beta, eexistem alguns novos recursos excelentes que todos ns podemos esperaranimados com este novo lanamento. Juntamente com o Visual Studio 2010 e do.NET Framework 4,0 veremos a verso 4.0 da linguagem de programao C #.Neste artigo eu gostaria de olhar um pouco a trs de onde comeou a linguagem deprogramao C # e olhar para onde Anders Hejlsberg do C # e sua equipe queremchegar.

    Em 1998, o projeto C # comeou com o objetivo de criar uma simples, moderna e

    orientada a objeto, linguagem de programao que se tornou conhecido como o.NET. A Microsoft lanou o. NET e a linguagem de programao C #, em meados2000 e desde ento, C # tornou-se uma das mais populares linguagens deprogramao em uso hoje. Foi lanado ento o C# 1.0

    A verso 2.0 da linguagem evoluiu de mais, particularmente acho que e umas dasmaiores evolues em to pouco tempo de uma linguagem e passou a dar suporteaos genricos, mtodos annimos, iterators, tipos parciais e tipos anulveis.

    Ao conceber a verso 3.0 da linguagem a nfase foi para permitir a LINQ(Language Integrated Query), que exigia a adio das seguintes funcionalidades:

    Implictly Typed Local Variables. Extension Methods. Lambda Expressions. Object and Collection Initializers. Annonymous types. Implicitly Typed Arrays. Query Expressions and Expression Trees.

    No passado linguagens de programao foram projetadas com um determinadoparadigma em mente, e como tal, temos linguagens que foram, como exemplo,destinadas a serem orientadas a objeto ou funcionais. Hoje, porm, as linguagensque a ser concebidas com vrios paradigmas em mente. Na verso 3.0 da

    linguagem de programao C # adquiriu vrias capacidades funcionaisnormalmente associados a programao para permitir Language Integrated Query(LINQ).

    Na verso 4.0 do C # continua a evoluir, embora desta vez, a equipe do C # foraminspiradas por linguagens dinmica como Perl, Python e Ruby. A realidade queexistem vantagens e desvantagens para ambas as linguagens seja ela escritaestaticamente e dinamicamente.

    Outro paradigma alem do design e inovao concorrente que um paradigmaque tem certamente influenciaram o desenvolvimento do Visual Studio 2010 e do.NET Framework 4.0.

    Agora o que o C# traz de novo:

  • 8/7/2019 CSharp_4.0

    2/6

  • 8/7/2019 CSharp_4.0

    3/6

    Um desenho padro voc ver como muitas vezes que um determinado mtodo estsobrecarregado, porque o mtodo deve ser chamado com um nmero varivel deparmetros.

    Vamos assumir que temos o seguinte mtodo OpenTextFile juntamente com trssobrecargas do mtodo com diferentes assinaturas. Sobrecargas do mtodo

    primrio em seguida chame o mtodo primrio de passar os valores padro nolugar desses parmetros para os quais um valor no foi especificado na chamadapara o mtodo sobrecarregado.

    public StreamReader OpenTextFile(

    string path,

    Encoding encoding,

    bool detectEncoding,

    int bufferSize) { }

    public StreamReader OpenTextFile(

    string path,

    Encoding encoding,

    bool detectEncoding) { }

    public StreamReader OpenTextFile(

    string path,

    Encoding encoding) { }

    public StreamReader OpenTextFile(string path) { }

    No C # 4.0 O mtodo primrio pode ser refactored para usar parmetros opcionaiscomo mostra o seguinte exemplo:

    public StreamReader OpenTextFile(string path,

    Encoding encoding = null,

    bool detectEncoding = false,

    int bufferSize = 1024) { }

    Perante esta declarao, agora possvel chamar o mtodo OpenTextFile omitindoum ou mais dos parmetros opcionais.

    OpenTextFile("foo.txt", Encoding.UTF8);

    Tambm possvel usar o C # 4,0 suporte para parmetros nomeados e, como tal,o mtodo pode ser chamado OpenTextFile omitindo um ou mais dos parmetrosopcionais, enquanto especificando tambm outro parmetro pelo nome.

    OpenTextFile("foo.txt", Encoding.UTF8, bufferSize: 4098);

    O nome dos argumentos deve ser fornecido somente estncia ltima embora desdequando eles podem ser fornecidas em qualquer ordem.

    Se voc alguma vez escrito qualquer cdigo que executa um certo grau deinteroperabilidade COM voc provavelmente visto como o cdigo seguinte.

    object filename = "test.docx";

    object missing = System.Reflection.Missing.Value;

    doc.SaveAs(ref filename,

  • 8/7/2019 CSharp_4.0

    4/6

    ref missing, ref missing, ref missing,

    ref missing, ref missing, ref missing,

    ref missing, ref missing, ref missing,

    ref missing, ref missing, ref missing,

    ref missing, ref missing, ref missing);

    Com os parmetros opcionais e nomeado linguagem C # 4,0 prev melhoriassignificativas na interoperabilidade COM e, portanto, o cdigo acima pode agora serrefactored tal que o convite apenas:

    doc.SaveAs("foo.txt");

    Ao realizar a interoperabilidade COM voc perceber que voc capaz de omitir a refmodifer embora o uso do modificador ref ainda necessrio quando no exeramCOM interoperabilidade.

    Com as verses anteriores das tecnologias era necessrio tambm um navio

    Primary Interop Assembly (PIA), juntamente com o seu aplicativo gerenciado. Issono necessrio quando se utiliza C # 4.0, porque o compilador ir injetar vez ointerop tipos diretamente para as Assembly de seu aplicativo gerenciado e s vaiinjetar os tipos que voc est usando e no de todos os tipos encontrados nointerior da PIA.

    O ltimo aperfeioamento lingstico que vamos explorar co-varincia e contra-varincia e vamos comear por explorar com a co-varincia. NET matrizes.

    string[] names = new string[] {

    "Anders Hejlsberg",

    "Mads Torgersen",

    "Scott Wiltamuth",

    "Peter Golde" };

    Write(names);

    Desde verso 1.0 em um array o. NET Framework foi co-variante significando queuma matriz de strings, por exemplo, pode ser passada para um mtodo que esperaum array de objetos. Como tal, a matriz acima pode ser transmitida para oseguinte Escreve mtodo que espera um array de objetos.

    private void Write(object[] objects)

    {

    }

    Infelizmente, em matrizes. NET no so co-seguro variante como podemos ver naseguinte cdigo. Partindo do pressuposto de que os objetos varivel uma matrizde strings da seguinte ter xito.

    objects[0] = "Hello World";

    Embora se uma tentativa feita para atribuir um inteiro matriz de strings umaArrayTypeMismatchException jogado.

    objects[0] = 1024;

  • 8/7/2019 CSharp_4.0

    5/6

    Em ambos os C # 2.0 e C # 3,0 invariantes so genricos e, portanto, um errocompilador iria resultar o seguinte cdigo:

    List names = new List();Write(names);

    Quando o Escreve mtodo definido como:

    public void Write(IEnumerable objects) { }

    Generics com C # 4,0 apoiar agora segura co-varincia e contra-varincia atravsdo uso das palavras-chave dentro e fora contextuais. Vamos dar uma olhada emcomo isso muda a definio do IEnumerable e IEnumerator interfaces.public interface IEnumerable

    {

    IEnumerator GetEnumerator();

    }

    public interface IEnumerator

    {

    T Current { get; }

    bool MoveNext();

    }

    Voc perceber que o tipo de parmetro T da interface IEnumerable foi prefixadocom o fora contextuais palavra-chave. Dado que a interface IEnumerable somente leitura, no h capacidade especificada na interface para inserir novoselementos com a lista, ela segura para o tratamento de algo mais derivados comoalgo menos derivados. Com a palavra-chave fora contextuais estamos afirmando

    que contratualmente IEnumerable segurana co-variante. Dado queIEnumerable segurana co-variante podemos agora escrever o seguintecdigo:

    IEnumerable names = GetTeamNames();

    IEnumerable objects = names;

    Porque a interface IEnumerable utiliza a palavra-chave no contexto docompilador podem motivo que a atribuio acima seguro.

    Utilizando a palavra-chave no contexto podemos alcanar seguro contra-varincia,ou seja, tratar algo menos derivados como algo mais derivados.

    public interface IComparer

    {

    int Compare(T x, T y);

    }

    Dado que IComparer segura contra-variante podemos agora escrever o seguinte cdigo:

    IComparer objectComparer = GetComparer();

    IComparer stringComparer = objectComparer;

    Embora o actual build CTP do Visual Studio 2010 e do. NET Framework 4,0 temsuporte limitado para a varincia melhorias em C # 4,0 a prxima verso beta

  • 8/7/2019 CSharp_4.0

    6/6

    permite que voc use o novo para dentro e para fora contextuais tais comopalavras-chave em tipos IComparer . O. NET Framework equipa est aatualizar os tipos, no mbito de ser co-seguro e contra-variante.

    Eu mostrei aqui alguns recursos que voc pode achar til para explorar ascapacidades da linguagem de programao C # 4,0 e gostaria de encoraj-lo a

    tambm fazer download e instalar a verso beta.

    Bons Cdigos...

    Ar t i go ced ido pe lo au to r .

    Leia m ais e m http://www.linhadecodigo.com.br/Colaborador.aspx?id=555