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 ??

Foi útil?

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++;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top