Skip to content

Latest commit

 

History

History
61 lines (45 loc) · 1.78 KB

057.md

File metadata and controls

61 lines (45 loc) · 1.78 KB

Problema

57 - Considera o seguinte tipo:

public struct Weird { }

Responde às seguintes questões:

  1. Implementa um indexador só de leitura no tipo Weird que aceite como índice uma variável do tipo object e devolva uma string contendo o resultado da invocação de ToString() na instância de object convertido em maiúsculas. Deves usar notação Lambda para simplificar a resolução do problema.
  2. Considera o seguinte código:
Weird weirdVar;
string str = weirdVar["Hello world!"];
Console.WriteLine(str);
  • O que vai ser impresso no ecrã?
  • Porque é que não foi preciso instanciar weirdVar antes de usarmos o indexador (linha 2)? Teria sido necessário instanciar weirdVar se o tipo Weird fosse uma classe?
  • Na sequência do código apresentado, o que seria impresso no ecrã pela seguinte linha de código: Console.WriteLine(weirdVar[100]);

Soluções

Solução 1

struct Weird
{
    public string this[object index] => index.ToString().ToUpper();
}
  • O que é impresso no ecrã é "HELLO WORLD!".

  • Porque structs são tipos de valor, ou seja, contêm diretamente os seus valores. Por outras palavras, a memória é alocada no momento em que a variável é declarada. Por isso é que não é preciso utilizar new ao declarar Weird. Se Weird fosse uma classe, já seria necessário utilizar new, porque classes são tipos de referência. Quando uma classe é declarada, a respetiva variável contém o valor de null, até que lhe seja atribuída um objeto instanciado com new.

Refêrencia sobre isto pode ser encontrado aqui.

  • Será impresso "100" no ecrã.

Por Inácio Amerio.