Je voudrais créer une méthode dans une classe générique de base pour retourner une collection spécialisée d'objets dérivés et effectuer des opérations sur eux, comme dans l'exemple suivant:Chose curieuse récurrentes contraintes de format modèle et génériques (C#)
using System;
using System.Collections.Generic;
namespace test {
class Base<T> {
public static List<T> DoSomething() {
List<T> objects = new List<T>();
// fill the list somehow...
foreach (T t in objects) {
if (t.DoSomeTest()) { // error !!!
// ...
}
}
return objects;
}
public virtual bool DoSomeTest() {
return true;
}
}
class Derived : Base<Derived> {
public override bool DoSomeTest() {
// return a random bool value
return (0 == new Random().Next() % 2);
}
}
class Program {
static void Main(string[] args) {
List<Derived> list = Derived.DoSomething();
}
}
}
Mon problème est que, pour faire une telle chose que je aurais besoin de spécifier une contrainte comme
class Base<T> where T : Base {
}
est-il possible de spécifier une contrainte comme ça en quelque sorte?
Juste créé cette suggestion d'uservoice pour ajouter un meilleur support de langage pour le code comme ceci, n'hésitez pas à voter dessus! https://visualstudio.uservoice.com/forums/121579-visual-studio-ide/suggestions/32188474-support-this-as-a-return-type-to-make-building-f –