Я хотел бы создать метод в базовом родовом классе, чтобы вернуть специализированную коллекцию производных объектов и выполнять некоторые операции над ними, как в следующем примере:Любопытно Повторяющиеся шаблон шаблон и дженерики ограничения (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();
}
}
}
Моя проблема заключается в том, что сделать такую вещь, мне нужно было бы указать ограничение как
class Base<T> where T : Base {
}
можно ли задать ограничение, как что так или иначе?
Просто создайте это предложение, чтобы добавить лучшую поддержку языка для такого кода, не стесняйтесь голосовать на нем! https://visualstudio.uservoice.com/forums/121579-visual-studio-ide/suggestions/32188474-support-this-as-a-return-type-to-make-building-f –