Ich habe eine abstrakte Klasse, die von verschiedenen anderen Klassen vererbt werden soll und an eine GameObject
mit der Attach
Methode, wie es einige Initialisierungsarbeiten (im Beispiel entfernt zur Vereinfachung).Abstrakte Klasse, verwenden Sie den Typ des Vererbers in der generischen Methode
public abstract class GameBehaviour : MonoBehaviour
{
private bool initialized = false;
public void Initialize(GameState gameState)
{
initialized = true;
}
public static T Attach<T>(GameObject parent, GameState gameState) where T : GameBehaviour
{
T behaviour = parent.AddComponent<T>();
behaviour.Initialize(gameState);
return behaviour;
}
}
ich dann eine andere Klasse namens WorldManager
und WorldRenderer
, die sowohl die abstrakte GameBehaviour
Klasse erben.
zu "initialisieren" Objekte dieser Klassen ich den folgenden Code verwenden:
WorldManager manager = WorldManager.Attach<WorldManager>(gameObject, this);
WorldRenderer renderer = WorldRenderer.Attach<WorldRenderer>(gameObject, this);
Nun, natürlich, die <WorldManager>
und <WorldRenderer>
überflüssig fühlt. Meine Frage ist, ob es möglich ist, die Attach
Methode zu ändern, um nicht den generischen Typ zu benötigen, sondern stattdessen den Typ des Erben, wenn das Sinn macht. Es gibt wahrscheinlich ein C# -Konzept, über das ich vergesse oder nichts weiß.
Jede Rückmeldung würde sehr geschätzt werden.
Ah, I:
Verbrauch! Das verschiebt den scheinbar überflüssigen '' stattdessen in die Klassendeklaration, aber ich bevorzuge das andersherum. Wird diese Lösung verwenden, wenn nicht etwas anderes auftaucht. Vielen Dank! –
Wenn Sie den generischen Parameter auf Methodenebene belassen, dann hat der Compiler nichts, woraus der Typ abgeleitet werden kann, da das T in keinem Parameter verwendet wird. – Maarten
Ich würde vorschlagen, die wo ersetzen T: GameBehaviour durch etwas wie T: IGameBehaviour, wenn das möglich ist. Auf diese Weise würden Sie es ein wenig entkoppeln. –
Andre