Pregunta

¿.NET CLR Typastes los objetos a los mencionados en la declaración de colección? Si declaro un

List<string> lststrs= new List<string>();
lststrs.add("ssdfsf");

¿.NET típica este objeto mientras agrega y se recupera ?????

Bueno, creo que la pregunta en sí misma no fue claramente entendida por todos. Déjame elaborado. En Java hay genéricos, pero si descompila el código, notará que, el compilador coloca un tipo de tipo Para ex: Lista ListofStrings; listofstrings.add (""); Valor de cadena = listofstrings.get (1); Después de descomparar el archivo de clase, vemos esta lista ListofStrings; listofstrings.add (""); String value = (String) listOfStrings.get (1); Aquí el compilador ha palmado el typecast para la cadena.

Ahora mi pregunta es si es lo mismo en .net?

¿Fue útil?

Solución

¿Quieres decir esto?

List<string> myList = new List<string>();

La lista es un tipo genérico: si declara que a continuación obtendrá un error de compialización:

List myList = new List(); //<-- big mama of a compilation error

De todos modos, dado que es una lista genérica, se escribe fuertemente, por lo que no podrá transmitir nada que no sea una cadena (si lo hace, se producirá, nuevamente, en un gran mama de un error de compilación).

Otros consejos

No, su lista se escribe fuertemente a las cuerdas aquí. Esa es toda la ventaja de usar genéricos.

No se escribe no.

Los genéricos Force Type Saftey al permitir que los objetos del tipo especificado se agreguen a la colección genérica. Estas son advertencias de compiladores.

En su ejemplo, si intentara agregar otro objeto, como un entero, entonces obtendría una advertencia de compilador.

No hay tal cosa como una "lista" :)

Sin embargo, hay un List<string>. Aquí no lanzará su cuerda, ya que es una colección de cuerdas.

Sin embargo, considere esto:

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).

No. No es necesario, ya que la colección está escrita.

No se necesita ningún tipo de encascado. El hecho de usar genéricos hace que su lista se escriba fuertemente automáticamente.

No, no lo hace. A diferencia de Java, Die CLR implementa genéricos como tipos diferentes por su cuenta, y no a través de la borrado de tipo. Entonces, un List<string> es un tipo diferente de List<int>, y ambos tipos se contratan dinámicamente en tiempo de ejecución cuando es necesario.

NO.

Consulte la implementación de 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top