У меня есть базовый класс, который реализует большинство вещей, которые мне нужны. Я хочу, чтобы пользователь API написал унаследованный класс с функцией, которая могла бы иметь любую подпись, но фиксированное имя.
Что-то, что концептуально будет работать как
(ValueTuple out) Act(ValueTuple in)
для неограниченного количества выбранных пользователем аргументов, чтобы один пользователь API мог написать что-то вроде:
(bool, Message) Act(List<Packet> ps)
, а другой мог бы написать что-то вроде:
List<OtherMessage> Act(Packages ps, Status s)
Я хотел бы, чтобы они написали только одну такую функцию для каждого наследника класса. В настоящее время я использую аннотацию [Act], чтобы узнать, какая функция была объявлена пользователем, однако пользователям не ясно, нужно ли ей писать ее, глядя на базовый класс.
Можем ли мы сделать ее наследующей? некоторый объект Dynami c (Expando) или иметь поле Dynami c для достижения такого поведения, то есть базовый класс, такой как (псевдокод):
class Base : DynamicObject {
public virtual dynamic Act;
}
, который пользователи могут перегружать чем-то вроде (псевдокод):
class Client : Base {
public new List<OtherMessage> Act(Packages ps, Status s){ return null; }
}