Я хотел бы создать метод в базовом универсальном классе для возврата специализированной коллекции производных объектов и выполнить некоторые операции над ними, как в следующем примере:
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();
}
}
}
Моя проблема в том, что для выполнения такой вещи мне нужно будет указать ограничение, например
class Base<T> where T : Base {
}
Можно ли каким-то образом указать такое ограничение?