Я смотрю на сложную и универсальную унаследованную платформу, которую мне, в конечном счете, нужно будет расширить, но сначала нужно просто ее понять, и я изо всех сил пытаюсь это сделать из-за иерархии и структуры наследования.
Все это является частью внутренней работы стека служб WCF, обработки запросов, ответов и т. Д.
В качестве примера я включил только сигнатуры классов и их конструкторы, поскольку внутренняя функциональностьне беспокойтесь.
public sealed class ProcessDerived : ProcessBase<Filter, RequestExternal, RequestItemExternal, ResponseCallBack, ResponseInternal>
{
public ProcessDerived(ProcessManager Manager) : base(Manager) { }
}
public abstract class ProcessBase<TFilter, TRequestExternal, TRequestItemExternal, TResponseCallBack, TResponseInternal>
: ProcessBaseSync<TFilter, TRequestExternal, TRequestItemExternal, TResponseCallBack, TResponseInternal>
where TFilter : FilterBase
where TRequestExternal : class
where TRequestItemExternal : class
where TResponseCallBack : class
where TResponseInternal : ProcessResponseBase
{
protected ProcessBase(ProcessManager Manager) : base(Manager) { }
}
public abstract class ProcessBaseSync<TFilter, TRequestExternal, TRequestItemExternal, TResponseCallBack, TResponseInternal>
: ProcessBaseCache<TFilter, TRequestExternal, TRequestItemExternal, object, TResponseCallBack, TResponseInternal, CacheKeyBase>
where TFilter : FilterBase
where TRequestExternal : class
where TRequestItemExternal : class
where TResponseCallBack : class
where TResponseInternal : ProcessResponseBase
{
protected ProcessBaseSync(ProcessManager Manager) : base(Manager) { }
}
public abstract class ProcessBaseCache<TFilter, TRequestExternal, TRequestItemExternal, TResponseImmediate, TResponseCallBack, TResponseInternal, TCacheKey>
: IProcess, IProcess<TFilter, TResponseInternal>, IProcess<TResponseCallBack>
where TFilter : FilterBase
where TRequestExternal : class
where TRequestItemExternal : class
where TResponseImmediate : class
where TResponseCallBack : class
where TResponseInternal : ProcessResponseBase
where TCacheKey : CacheKeyBase
{
private ProcessManager _manager;
protected ProcessBaseCache(ProcessManager Manager)
{
_manager = Manager;
}
}
Основные вопросы, которые у меня есть:
1) Какой технический термин используется для описания этой структуры множественного наследования, как показано в первой строке: "ProcessDerived: ProcessBase".
Это напоминает мне кортежи, но я не понимаю, что здесь происходит на техническом уровне.Это просто способ обойти ограничение множественного наследования?
2) Наследует ли оно от "ProcessBase", а также от всех параметров типа рядом с ним?
3) Что такоецель добавления ": base (XYZ)" в конструктор?Это просто требование соответствия наследования классов (конструктор, имитирующий сигнатуру класса)?Я не понимаю, почему это требуется.
Эта сложная 4-уровневая иерархия кажется очень ненужной и кажется невозможной для следования.
Я явно упускаю некоторые фундаментальные знания C # здесь.