Если у меня есть абстрактный класс, могу ли я вернуть перечислитель типа производного класса?Или я должен был бы использовать дженерики в базовом классе или универсальный метод?Вот действительно тупой пример того, что я пытаюсь сделать -
public abstract class Person {
public IEnumerable<MyType> Search() {
DbDataReader reader = Database.Instance.ExecuteReader(sql);
while(reader.Read()) {
MyType row = new MyType();
row.Load(reader);
yeild return row;
}
}
private Load(DbDataReader reader) {
//load instance from reader row
}
//declare properties that can be searched, such as Location
}
public class Programmer : Person {
//declare properties that can be searched, such as Language
}
Тогда где-то еще я хотел бы иметь возможность позвонить
Programmer programmer = new Programmer();
programmer.Location = "My city";
programmer.Language = "C#";
foreach(Programmer programmer in programmer.Search())
{
//display list of c# programmers in my city
}
Я знаю, что могу сделатьэто с помощью универсального метода, такого как Search<T>()
, но я хотел бы иметь возможность вызывать функцию поиска из класса, который точно не знает тип, которым является Person (например, базовый класс для обработчика AJAX)
Если это невозможно, кто-нибудь может привести пример или причину, почему нет?Или это будет слишком сложно внедрить в компилятор?