Frage

Typen .NET CLR die Objekte zu den in der Sammelerklärung erwähnten Objekte? Wenn ich a erkläre

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

Typen .NET dieses Objekt beim Hinzufügen und Rückzug ?????

Nun, ich denke, die Frage selbst wurde von jedem nicht klar verstanden. Lassen Sie mich ausgiebig. In Java gibt es Generika, aber wenn Sie den Code dekompilieren, werden Sie feststellen, dass der Compiler ein Typecast überall platziert, wo das Sammelobjekt verwendet wird. Beispiel für Ex: ListenlisteOfStrings; listofstrings.add (""); String value = listofStrings.get (1); Nach dem Dekompetenen der Klassendatei sehen wir diese Listlistenliste. listofstrings.add (""); String value = (String) listofStrings.get (1); Hier hat der Compiler die Typecast für die Saite abgeschaltet.

Jetzt ist meine Frage, ob es in .NET gleich ist?

War es hilfreich?

Lösung

Meinst du das?

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

Die Liste ist ein generischer Typ - Wenn Sie wie unten deklarieren, erhalten Sie einen Kompositionsfehler:

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

Wie auch immer - da es sich um eine generische Liste handelt, ist sie stark eingetippt, sodass Sie nichts übergeben können, was keine Zeichenfolge ist (wenn Sie dies tun, resultiert dies - wieder - in einem Big Mama eines Kompilierungsfehlers).

Andere Tipps

Nein, Ihre Liste wird hier stark in Saiten tippt. Das ist der gesamte Vorteil der Verwendung von Generika.

Es typisch nein.

Generika -Krafttyp Saftey, indem nur Objekte des angegebenen Typs in die generische Sammlung hinzugefügt werden können. Dies sind Compiler -Warnungen.

In Ihrem Beispiel würden Sie versuchen, ein anderes Objekt wie eine Ganzzahl hinzuzufügen, dann erhalten Sie eine Compiler -Warnung.

Es gibt keine "Liste" :) :)

Es gibt jedoch eine List<string>. Hier wird es Ihre Saite nicht wirken, da es sich um eine Sammlung von Saiten handelt.

Betrachten Sie dies jedoch:

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

Nein, es muss nicht, da die Sammlung eingegeben wird.

Es ist überhaupt keine Typen erforderlich. Die Tatsache, Generika zu verwenden, lässt Ihre Liste automatisch stark eingegeben.

Nein, es tut es nicht. Im Gegensatz zu Java implementiert die CLR Generika als unterschiedliche Typen selbst und nicht als Typ -Löschen. Also a List<string> ist ein anderer Typ als List<int>, und beide Typen werden bei Bedarf zur Laufzeit dynamisch verstärkt.

NEIN.

Siehe die Implementierung von 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++;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top