Вы сказали
Клиент наследует от «Entity», этот «Entity» принимает «Customer» в качестве T,
но этот клиент не "сущность"
Это не имеет никакого смысла, потому что это то, что означает наследование. Он устанавливает отношения "есть". Так что на самом деле Customer
это Entity
Извините, что был основан на коде с удаленными шаблонами, потому что он не был в блоке кода.
Тот же принцип все еще действует. Это немного сбивает с толку, потому что похоже, что это рекурсивное определение, но это не так.
Думайте об этом как о Customer
, унаследованном от Entity
Просто случается, что есть методы или поля, которые зависят от самого общего параметра, например Customer
. Я не знаком с NHibernate, поэтому я не знаю, как выглядит остальная часть Entity<T>
, но я думаю, что у него есть некоторые методы, которые используют его собственный тип в качестве универсального параметра.
Скажем, например, у него есть метод с именем
public IEnumerable<T> GetEntities()
, который вернул список своих экземпляров. Этот метод должен возвращать конкретный тип, а не базовый тип. Таким образом, в классе Customer
этот метод будет
public IEnumerable<Customer> GetEntities<Customer>()
Если бы он не имел универсального параметра, он мог бы только вернуть IEnumerable<Entity>
Это всего лишь пример того, как это можно использовать, я не знаю, как это на самом деле используется.