В итоге я создал интерфейс (IAccess, как показано выше) и поместил ограничение типа на этот интерфейс ... затем использовал этот интерфейс для всех классов, взаимодействующих с рассматриваемыми типами.
так (извините, это высокий уровень, я не могу выписать мою фактическую реализацию)
interface IAccess<T> where T : ITypeInterface
{
CustCollection<T> GetEntities(Filter filter);
}
Я попытался сделать то, что было предложено, но у меня есть цепочка из 3 классов, унаследованных, и были проблемы с самым верхним родителем, использующим предложенную модель.
Я оставил ограничение для пользовательской коллекции:
public class CustCollection<T> : IEnumerable<T> where T : ITypeInterface
{}
Это действительно сработало только для меня, потому что я понял, что мне на самом деле не нужно делиться функциональностью с родительскими классами (так что, в основном, не заканчивалось принудительным применением истинного полиморфизма ... только в смысле взаимодействия общих объектов функциональность ядра полностью индивидуальный).
Чтобы избежать затенения, я объявляю новый
public new CustCollection<Type> GetEntities(Filter filter)
{
return new CustCollection<Type>();
}
Я надеюсь, что это полезно для некоторых ... хотя я не достиг в точности того, что намеревался сделать в начале, я нашел, что это подходящий обходной путь для моей ситуации.