Vorrei creare un metodo in una classe generica di base per restituire un insieme specializzato di oggetti derivati e di eseguire alcune operazioni su di essi, come nel seguente esempio:Curiosamente ricorrenti motivo template e generici vincoli (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();
}
}
}
Il mio problema è che per fare una cosa del genere avrei bisogno di specificare un vincolo come
class Base<T> where T : Base {
}
E 'possibile specificare un vincolo del genere che in qualche modo?
Ho appena creato questo suggerimento di servizio per aggiungere un migliore supporto linguistico per codice come questo, sentiti libero di votare! https://visualstudio.uservoice.com/forums/121579-visual-studio-ide/suggestions/32188474-support-this-as-a-return-type-to-make-building-f –