3 Stimmen

Wie speichern Sie einen Verweis auf eine Eigenschaft in C#?

Ich bin dabei, ein Spiel zu entwickeln, und arbeite derzeit an einem Inventarsystem. Ich habe eine Klasse, die den Spieler repräsentiert, die wie folgt aussieht:

class Player {
    public Weapon WeaponSlot {get;set;}
    public Shield ShieldSlot {get;set;}
    //etc.
}

Waffen, Schilde usw. sind Unterklassen einer allgemeinen Gegenstandsklasse:

class Item {
    //...
}

class Weapon : Item {
    //...
}

Es gibt Unterklassen von Weapon, usw., aber das ist nicht wichtig.

Wie auch immer, ich erstelle ein UserControl, um den Inhalt eines bestimmten Inventarplatzes anzuzeigen/zu ändern. Ich bin mir aber nicht sicher, wie ich das genau machen soll. In C++, würde ich etwas wie verwenden:

new InventorySlot(&(player.WeaponSlot));

Aber das kann ich in C# nicht tun.

Ich habe die TypedReference-Struktur gefunden, aber das funktioniert nicht, da es nicht erlaubt ist, ein Feld mit einer dieser Strukturen zu erstellen, sodass ich es nicht zur späteren Verwendung im Steuerelement speichern kann.

Ist die Reflexion der einzige Weg, oder gibt es eine andere Möglichkeit, die ich nicht kenne?

EDIT ----

Als Referenz habe ich Folgendes getan:

partial class InventorySlot : UserControl {
    PropertyInfo slot;
    object target;

    public InventorySlot(object target, string field) {

        slot = target.GetType().GetProperty(field);

        if (!slot.PropertyType.IsSubclassOf(typeof(Item)) && !slot.PropertyType.Equals(typeof(Item))) throw new //omitted for berevity

        this.target = target;

        InitializeComponent();
    }
    //...
}

Und so wird es initialisiert:

new InventorySlot(player, "WeaponSlot");

Auch was die Leistung angeht, mache ich mir keine allzu großen Sorgen. Es ist kein Echtzeitspiel, also muss ich den Bildschirm nur in Reaktion auf die Aktionen der Spieler aktualisieren :)

0voto

leppie Punkte 111830

Wenn Sie wirklich eine Referenz benötigen, können Sie stattdessen Felder verwenden. Sie können referenziert werden durch ref .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X