me gustaría crear un método en una clase genérica de base para devolver una colección especializada de objetos derivados y realizar algunas operaciones sobre ellos, como en el siguiente ejemplo:Curiosamente recurrentes patrón de plantilla y genéricos limitaciones (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();
}
}
}
Mi problema es que para hacer tal cosa que tendría que especificar una restricción como
class Base<T> where T : Base {
}
¿es posible especificar una restricción al igual que de alguna manera?
Acabo de crear esta sugerencia de usuario para agregar un mejor soporte de idioma para un código como este, ¡no dude en votar sobre él! https://visualstudio.uservoice.com/forums/121579-visual-studio-ide/suggestions/32188474-support-this-as-a-return-type-to-make-building-f –