Jump to content
Francisco Carvalho c#

Palavras <is> e <as>

Recommended Posts

Francisco Carvalho c#

Boa tarde!

Gostaria de esclarecer uma dúvida de c# relativamente às palavras reservadas <is> e <as> pois não sei o que trazem de significante para a programação em csharp.

Agradeço a disponibilidade das pessoas que me conseguirem ajudar visto que este assunto é do meu interesse. Agradeço também que não haja a existência de comentários desrespeituosos ou ofensivos.

Obrigado!

Share this post


Link to post
Share on other sites
Rechousa

Viva Francisco, boa noite,

Antes de mais, bem vindo à Comunidade Portugal a Programar!

Para mim, o operator is é mais fácil de explicar, pelo que vamos começar por aí:

A sintaxe básica é:

expr is type

O operator is retorna true quando uma expressão (expr) é do tipo indicado (type).

Para isso construí o seguinte exemplo: https://dotnetfiddle.net/0Q2Gq5

O exemplo contém:

  • class Animal, abstrata;
  • class Dog que herda de Animal;
  • class Cat que herda de Animal;
  • class Elephant que herda de Animal;
  • class Tree que não herda de nenhuma class;

Contém também três animais (objetos / instâncias de classes):

  • Cão pluto;
  • Gato garfield;
  • Elefante Dumbo

Ao executares o exemplo, irás ver que:

  • os três animais são do tipo object (porque uma class herda implicitamente de object);
  • os três animais são do tipo Animal (porque as classes Dog, Cat e Elephant herdam de Animal);
  • O pluto é do tipo Dog mas não é nem Cat nem Elephant, o que faz sentido;
  • O garfield é do tipo Cat mas não é nem Dog nem Elephant, o que também faz sentido;
  • O dumbo é do tipo Elephant mas não é nem Dog nem Cat, o que também faz sentido;
  • Nenhum dos três animais é do tipo Tree - são animais e não são árvores e como Tree não herda de nenhum animal (Cat, Dog, etc.) nem da class Animal, não é possível dizer que pluto, garfield ou dumbo sejam do tipo Tree, porque não são

Espero ter esclarecido o operator is.

 

Quanto ao operator as:

A sintaxe básica é:

expr as type

O operator as tenta converter a expressão (expr) no tipo indicado (type). Se a conversão for válida, então é retornada uma instância do tipo indicado, senão, é retornado null.

Para demonstrar melhor construí outro exemplo: https://dotnetfiddle.net/1uJPtf

O exemplo contém:

  • class Animal, abstrata com uma propriedade também abstrata (int) que indica o número de patas;
  • class Dog que herda de Animal, com 4 patas;
  • class Cat que herda de Animal, com 4 patas;
  • class Spider que herda de Animal, com 8 patas;
  • class Bee que herda de Animal, com 6 patas e com 2 asas (nova propriedade, NumberOfWings)

Contém também quatro animais (objetos / instâncias de classes):

  • Cão pluto;
  • Gato garfield;
  • Aranha aragog;
  • Abelha maya;

Ao executares o exemplo, irás ver que:

  • consegues converter todos os animais para o tipo Animal e obter o seu número de patas;
  • consegues converter todos os animais para o seu próprio tipo (pluto para Dog, etc) e obter o seu número de patas - repara que o método ShowAsOperatorResults recebe a instância do animal como object;
  • No caso da maya, além de conseguires obter o número de patas, irás conseguir obter também o número de asas, isto porque maya é do tipo Bee
  • Nos casos em que não aparecem o número de patas ou de asas, tal acontece porque não é possível converter a expressão para o tipo indicado, exemplo, não é possível converter o pluto num gato ou numa aranha

Com isto, espero ter esclarecido o operator as.

Qualquer dúvida, diz.

Espero ter ajudado,

 

  • Vote 2

Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.