Bazı diğer sınıflar tarafından miras alınması ve Attach
yöntemini kullanarak'a eklenmesi gereken bir özet sınıfım var, çünkü bazı başlatma çalışmaları (örneğin kaldırıldı) sadelik için).Özet sınıf, jenerik yöntemde mirasın türünü kullanın
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;
}
}
Sonra WorldManager
ve her iki soyut GameBehaviour
sınıf miras WorldRenderer
adlı başka sınıf var.
Ben şu kodu kullanın bu sınıfların nesnelerini "başlatmak" Kime:
WorldManager manager = WorldManager.Attach<WorldManager>(gameObject, this);
WorldRenderer renderer = WorldRenderer.Attach<WorldRenderer>(gameObject, this);
Şimdi, açıkçası, <WorldManager>
ve <WorldRenderer>
gereksiz hissediyor. Benim sorum, genel türüne gerek duymamak için Attach
yönteminin değiştirilip değiştirilmeyeceğidir, ancak bunun anlamlı olması durumunda, onun mirasının türünü kullanmasıdır. Muhtemelen unuttuğum ya da farkında olmadığım bazı C# konsepti var.
Her türlü geri bildirim büyük ölçüde takdir edilecektir.
Ah, görüyorum! Bu, "WorldManager>" adlı gereksiz yere, sınıf beyanına yöneliyor, ancak bunu diğer yoldan tercih ediyorum. Başka bir şey gelmedikçe bu çözümü kullanacaktır. Çok teşekkür ederim! –
Genel parametreyi yöntem düzeyinde bırakırsanız, T öğesinin herhangi bir parametrede kullanılmadığından, türetmenin türden türetilmesinde hiçbir şey yoktur. – Maarten
T: GameBehaviour'un yerini, mümkün ise T: IGameBehaviour gibi bir yere göre değiştirmeyi öneririm. Bu şekilde biraz ayrıştırırsın. –
Andre