Есть ли имя для этого шаблона использования дженериков?

//this class (or interface if you like) is set up as generic...
public abstract class GenericBase<T> 
{
    public T PerformBasicTask(T in) { ... }
}

//... but is intended to be inherited by objects that close the generic...
public class ConcreteForDates:GenericBase<DateTime>
{
    public DateTime PerformSpecificTask(DateTime in) { ... }
}

//... so that consuming code never knows that a generic is involved
var myDateConcrete = new ConcreteForDates(); //look ma, no GTP!
//These two methods look alike, and there is no generic type inference,
//even with PerformBasicTask().
var basicResult = myDateConcrete.PerformBasicTask(DateTime.Now);
var specificResult = myDateConcrete.PerformSpecificTask(DateTime.Today);

//does not compile because T is understood by inheritance to be a DateTime,
//even though PerformBasicTask()'s implementation may well handle an int.
var anotherBasicResult = myDateConcrete.PerformBasicTask(1);

Я видел и использовал этот паттерн несколько раз, и он очень полезен для PR. Обеспечение общей функциональности для ряда подклассов, зависящих от типа. Например, это может быть модель для контроллеров / презентаторов, специфичная для типа объекта домена, который является центральным для страницы (страниц), для управления которыми используется класс; базовые операции, такие как извлечение / сохранение, могут использовать 100% общие функции, но привязка / отключение может быть очень специфичной.

Есть ли имя для этого шаблона общего объявления без предоставления общего доступа конечному пользователю?

9
задан KeithS 31 October 2011 в 05:17
поделиться