J'ai une classe en C # avec un modèle et une méthode statique similaire à à partir de là, je dérive une classe et spécifiez un paramètre de modèle à la classe de base p> BClass<int> d = DClass.Create();
3 Réponses :
Il semble que ce que vous voulez, c'est pour Cela pourrait le rendre plus clair. Supposons que vous ayez eu cette hiérarchie: p> une option pour obtenir quelque chose comme la fonctionnalité que vous souhaitez peut-être définir votre méthode code> Créer code> P> dclass code> pour être un alias pour
bclass
dclass code> dérive de fort>
bclass
dclass.create (); code> crée un
bclass
dclass code> (c'est l'inverse).
static TClass Create<TClass>() where TClass : BClass<T>, new() {
return new TClass();
}
// code elsewhere
var shape = DClass.Create<DClass>();
class BClass<T> { public static T1 Create<T1, T2>() where T1 : BClass<T2>, new() { return new T1(); } } class DClass : BClass<int> { } class Program { static void Main(string[] args) { DClass d = DClass.Create<DClass, int>(); } }
class BClass<T, TSelf> where TSelf: BClass<T, TSelf>, new() {
public static TSelf Create() {
return new TSelf();
}
}
class DClass: BClass<int, DClass> {}
class Program {
static void Main(string[] args) {
DClass d = DClass.Create();
}
}
Vous ne savez pas qu'une classe pourrait se réfuser en tant que paramètre de type dans sa superclasse? Paradoxe au poulet et aux œufs ou quelque chose ...
Intelligent et un peu bizarre! ;) Le seul inconvénient que je vois ici est qu'il semble qu'il n'y ait jamais de moyen d'instancier un ancien Bclass
@Peter, j'en ai réellement utilisé cette réussite beaucoup. Par exemple, il vous permet également de créer une meilleure méthode de clone car elle élimine la nécessité de refouler, etc.
@Dan Tao, à droite, qui ne fonctionne essentiellement que pour les classes "abstraites" qui sont ensuite héritées.
@LUCERO, c'est assez cool. Devinez que c'était similaire à ce que j'ai essayé auparavant, myClass: isomegenericinterface
@Peter, MyClass: IsomegenericInterface
@LUCERO - OCH ... homme, qu'est-ce que c'était alors ?? Peut-être myClass
C'est une bonne réponse, mais notez que si vous avez une autre classe Eclass: DCLASS code>, puis
eclass.create () code> retournera un
dclass code> instance , pas une instance code> eclass code>, qui peut ou non être un problème.