57 - Considera o seguinte tipo:
public struct Weird { }
Responde às seguintes questões:
- Implementa um indexador só de leitura no tipo
Weird
que aceite como índice uma variável do tipoobject
e devolva uma string contendo o resultado da invocação deToString()
na instância deobject
convertido em maiúsculas. Deves usar notação Lambda para simplificar a resolução do problema. - 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 instanciarweirdVar
se o tipoWeird
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]);
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 utilizarnew
ao declararWeird
. SeWeird
fosse uma classe, já seria necessário utilizarnew
, porque classes são tipos de referência. Quando uma classe é declarada, a respetiva variável contém o valor denull
, até que lhe seja atribuída um objeto instanciado comnew
.
Refêrencia sobre isto pode ser encontrado aqui.
- Será impresso "100" no ecrã.
Por Inácio Amerio.