2016-11-22 5 views
0

Ich möchte eine Liste erstellen, die alle Objekte für alle verschiedenen Einheiten enthält, die in meinem Spiel erzeugt werden, aber sie sind nicht alle dieselbe Klasse. Sie alle sind Unterklassen der Haupteinheitenklasse, wenn das helfen würde. Aber im Grunde habe ich eine Haupteinheitsklasse mit der grundlegenden Funktionalität, dann mehr für Schwertkämpfer, Pikeman, usw., und ich möchte in der Lage sein, alle verschiedenen Typen in eine Liste zu setzen, um sie leichter verwalten zu können. Ist das möglich?C# - Liste der verschiedenen Arten von Objekten

+0

Aber das hätte nicht die Informationen von der Unterklasse drin wäre es? –

+0

Sicher wäre es, Sie können das komplette Objekt hinzufügen. Sie müssen es jedoch beim Abrufen an das bevorzugte Objekt übergeben. – NikxDa

+0

Es ist besser, Listen von Objekten zu erstellen. Wenn Sie alle Objekte durchlaufen müssen, wird der Overhead sehr klein sein (beim Durchlaufen jeder Liste in der Hauptliste), aber das Durchlaufen eines speziellen Objekttyps in einer eigenen Liste wird viel schneller sein als das Durchsuchen einer großen Liste mit allen Objekten. – crea7or

Antwort

3

Ja, das ist möglich.

Wie Rob in seinem Kommentar sagte, müssen Sie eine List<SharedBaseClass> machen.

var someList = new List<SharedBaseClass>(); 

Wenn Sie mit einem bestimmten Element in der Liste zu interagieren versuchen, müssen Sie auf die richtige Unterklasse zurückgeworfen:

// throws an exception if type wrong 
var someElement = (desiredSubClass) someList[someElementIndex]; 

// return null if type wrong 
var someElement = someList[someElementIndex] as desiredSubClass; 
+3

Sicherer zu tun 'var someElement = someList [index] als DesiredSubclass' dann machen Sie einen Null-Check auf 'someElement'. Alternativ, 'someList.OfType ()', um alle Elemente eines bestimmten abgeleiteten Typs zu erhalten – KMoussa

+0

@KMoussa danke, habe ich meine Antwort aktualisiert! – Slvrfn

1

Slvrfn ‚s anwer sollte funktionieren. Wenn Sie beim Casting in Unity keinen Einfluss auf die Leistung haben, können Sie auch eine Variable in der Unterklasse erstellen und sie im Schlüsselwort mit dem Schlüssel this initialisieren.

Angenommen, Sie haben zwei Klassen haben Sie erben von:

public class FirstBase 
{ 
    public int speed = 50; 
} 

public class SecondBase : FirstBase 
{ 
    public int live = 5; 
} 

und dann Unterklasse:

public class MySubClass : SecondBase 
{ 
    public FirstBase firstBase; 
    public SecondBase secondBase; 

    public MySubClass() 
    { 
     firstBase = this; 
     secondBase = this; 
    } 
} 

Sie nicht mehr werfen müssen. Sie können die definierten Variablen firstBase und secondBase von MySubClass verwenden.

List<MySubClass> subClass = new List<MySubClass>(); 
subClass.Add(new MySubClass()); 

FirstBase firstBase = subClass[0].firstBase; 
SecondBase secondBase = subClass[0].secondBase; 
+0

Problem mit diesem ist Ich möchte eine Reihe von Unit-Typen im Grunde haben, so kann ich sie anrufen, und sie sind nicht alle Unterklassen von jedem toher –

+0

Nun, Sie sagten, sie sind Unterklasse in Ihrer Frage. TBH, wenn Sie eine gute Antwort haben möchten, geben Sie bitte beim nächsten Mal einen Code in Ihre Frage ein. Die Probe, die Sie zur Verfügung stellen, wird den Leuten sagen, was Sie tun. – Programmer

Verwandte Themen