Ich suche nach einer Möglichkeit, Code zu bereinigen. Ich habe die untenAufrufen einer Methode beim Initialisieren von Objekt
var sprite1 = new Sprite(_content.Load<Texture2D>("Content/Block.png"));
sprite1.Position = new Vector2f(100, 100);
sprite1.SetInput(Key.A, Key.D, Key.W, Key.S);
var sprite2 = new Sprite(_content.Load<Texture2D>("Content/Block.png"));
sprite2.Position = new Vector2f(200, 100);
sprite2.SetInput(Key.Left, Key.Right, Key.Up, Key.Down);
_sprites = new List<Sprite>()
{
sprite1,
sprite2,
};
Ich möchte den "Sprite" initialisieren, wenn Sie es in die Liste hinzufügen. Aber das Problem, das ich habe, ist die "SetInput" -Methode. Diese Methode ist optional.
Ich weiß, dass dies nicht syntaktisch korrekt ist, aber unten ist das, was ich rede
_sprites = new List<Sprite>()
{
new Sprite(_content.Load<Texture2D>("Content/Block.png")) { Position = new Vector2f(100, 100), SetInput(Key.A, Key.D, Key.W, Key.S) },
};
Wie Sie sehen, ich bin versucht, ein Verfahren in einer ähnlichen Art und Weise rufen Sie kann Eigenschaften festlegen.
Hier sind die Möglichkeiten, die ich um es zu bekommen
Optionale Parameter Konstruktor für die Schlüssel
public Sprite(Texture2D texture, Key? left, Key? right, Key? up, Key? down)
Ein zweiter Konstruktor mit den Tasten
public Sprite(Texture2D texture, Key left, Key right, Key up Key down)
- denke
Erstellen eines Delegaten in der Klasse "Sprite", die beim Initialisieren zugewiesen wird ized und dann Schleife um alle _sprites,
Der Code Aufruf der Methode ich am Anfang gestellt habe, ist in Ordnung, ich frage mich nur, wenn eine ‚bessere‘ Art und Weise gibt es?
Danke.
Ein zweiter Konstruktor die erwartete API würde sein wollen. –
In diesem einfachen Fall würde ich wahrscheinlich mit einem zweiten Konstruktor gehen. Für Klassen mit vielen Optionen verwende ich generell eine Builder-Klasse mit Methodenverkettung: 'neuer Builder (). Position (...). Eingabe (...). Build()' –
Lumen
Natürlich, Sie können auch eine Wrapper-Klasse 'Input' erstellen, die vier Schlüssel enthält und dann eine Eigenschaft' Sprite.Input' hinzufügen, die 'SetInput' ersetzt. – Lumen