.NET TypeCast quando um objeto é usado na coleção usando genéricos?
-
19-09-2019 - |
Pergunta
.NET CLR Type -se os objetos para os mencionados na declaração da coleção? Se eu declarar um
List<string> lststrs= new List<string>();
lststrs.add("ssdfsf");
O .Net TypeTes esse objeto ao adicionar e recuperar ?????
Bem, acho que a pergunta em si não foi claramente entendida por todos. Me elaboram. Em Java, há genéricos, mas se você descompilar o código, notará que, o compilador coloca um tipo de tipo de tipo de tempo em que o objeto de coleta é usado. Para Ex: List ListOfStrings; listofstrings.add (""); String value = listofStrings.get (1); Depois de descompilar o arquivo de classe, vemos esta lista de listas; listofstrings.add (""); String value = (string) listOfStrings.get (1); Aqui, o compilador empalideceu o tipo de string.
Agora minha pergunta é se é o mesmo no .NET ??
Solução
Você quer dizer isso?
List<string> myList = new List<string>();
Lista é um tipo genérico - se você declarar abaixo, você receberá um erro de comporção:
List myList = new List(); //<-- big mama of a compilation error
De qualquer forma - como é uma lista genérica, é fortemente digitada, para que você não possa passar nada que não seja uma string (se o fizer, isso resultará - novamente - em um grande mãe de um erro de compilação).
Outras dicas
Não, sua lista é fortemente digitada para cordas aqui. Essa é toda a vantagem de usar genéricos.
Não tipcast não.
O Tipo de força genéricos é o segurança, permitindo apenas objetos do tipo especificado a serem adicionados à coleção genérica. Estes são avisos do compilador.
No exemplo, se você tentasse adicionar outro objeto, como um número inteiro, receberá um aviso de compilador.
Não existe uma "lista" :)
No entanto, há um List<string>
. Aqui não lança sua corda, pois é uma coleção de cordas.
Considere isso, no entanto:
List<object> objects = new List<object>();
objects.Add("Hello SO.com");
string myString = objects.First(); //Wont compile, as objects return an object.
//You need to cast it to a string (for example, by using the as operator).
Não. Não precisa, já que a coleção é digitada.
Nenhuma tipo de tipo de tempo é necessária. O fato de usar genéricos faz com que sua lista seja fortemente digitada automaticamente.
Não, não. Ao contrário do Java, o Die CLR implementa os genéricos como tipos diferentes por conta própria, e não por meio de apagamento do tipo. Então, a List<string>
é um tipo diferente de List<int>
, e ambos os tipos são contratados dinamicamente em tempo de execução quando necessário.
NÃO.
Veja a implementação do list.add:
private T[] _items;
public void Add(T item)
{
if (this._size == this._items.Length)
{
this.EnsureCapacity(this._size + 1);
}
this._items[this._size++] = item;
this._version++;
}