J'essaye de créer une fonction en C# qui me permettra, une fois appelée, de renvoyer une référence à un type de classe donné. Les seuls types de fonctions comme celui que j'ai vu sont dans UnrealScript et même alors la fonctionnalité est codée en dur dans son compilateur. Je me demande si je peux le faire en C#. Voici ce que je veux dire (extrait de code de la source UnrealScript):Limites de classe et archétypes
native(278) final function actor Spawn
(
class<actor> SpawnClass,
optional actor SpawnOwner,
optional name SpawnTag,
optional vector SpawnLocation,
optional rotator SpawnRotation
);
maintenant à UScript vous appeler comme ça ...
local ActorChild myChildRef; //Ref to ActorChild which Extends 'actor'
myChildRef = Spawn(class'ActorChild' ...); //rest of parameters taken out
myChildRef.ChildMethod(); //method call to method existing inside class 'ActorChild'
qui renvoie une référence à un objet de la classe « ActorChild 'et le mettre à la variable' myChildRef. ' J'ai besoin de faire quelque chose de similaire en C#. J'ai cherché dans Generics mais il semble que pour les utiliser, j'ai besoin de créer une instance de la classe où ma fonction se trouve et de lui passer le paramètre 'generic'. Ce n'est pas très souhaitable cependant, car je n'aurai pas besoin d'utiliser la fonction 'Spawn' pour certaines classes, mais j'aurais quand même besoin d'ajouter le paramètre générique à la classe quand je l'utiliserai.
Je suppose qu'une question simplifiée serait, comment puis-je retourner un type que je ne sais pas à la compilation et quand les différentes classes pourraient être beaucoup trop à piéger.
pseudo-code (coller aux noms de classe UScript, à savoir Acteur):
//Function Sig
public class<Actor> Create(class<Actor> CreatedClass)
{
return new CreatedClass;
}
//Function call
ActorChild myChild = Create(class'ActorChild');
Toutes les idées?
EDIT: Je voudrais éviter les typecasts explicites qui se produiraient à partir de la classe appelant Créé. Si je peux effectuer un typage sur l'objet désiré dans la méthode Created et retourner le 'type inconnu' quel qu'il soit, je serais extrêmement heureux.
EDIT 2: Merci pour vos réponses.
Merci - Apparemment, je n'ai pas assez lu. Je pensais avoir une méthode générique, vous aviez aussi besoin d'un cours générique. –