Я не уверен, что это возможно, но если это не так, то какой лучший/самый элегантный способ сделать это.Как передать производный класс функции базового класса и вернуть производный класс C#
У меня есть List<DerivedClass>
, и я хочу вытащить элемент из списка, который соответствует некоторому критерию из его BaseClass.
public class BaseClass {...}
public class DerivedClass : BaseClass {...}
List<DerivedClass> dcList = new List<DerivedClass>();
..
DerivedClass dc = GetTheOneWeWant(dcList)
где функция выглядит следующим образом
public BaseClass GetTheOneWeWant(List<BaseClass> bc) {
return bc[0]; //for example
}
Так что эта функция может применяться для всех производных классов.
Я пытался что-то вроде этого
public T GetClosest<T>(List<T> list) {
return list.Aggregate((c, d) => c.DistanceFrom(FrameCenterX, FrameCenterY) < d.DistanceFrom(FrameCenterX, FrameCenterY) ? c : d);
}
но T не знает о методе DistanceFrom(), и он не позволит мне бросить Т как BaseClass. Я не уверен, как лучше справиться с этим. Я мог бы наложить DerivedClass на BaseClass и отправить его функции, но я хочу, чтобы он возвращал DerivedClass, а не BaseClass.