2010-04-24 1 views
1

Рассмотрим этот кусок кода:В библиотеке Enterprise, как абстрактное Validator.cs имеет определение метода?

public abstract class Validator 
{ 

    protected Validator() 
    { 
    } 


    protected abstract void ValidateCore(object instance, string value, IList<ValidationResult> results); 


    public void Validate(object instance, string value, IList<ValidationResult> results) 
    { 
     if (null == instance) throw new ArgumentNullException("instance"); 
     if (null == results) throw new ArgumentNullException("results"); 

     ValidateCore(instance, value, results); 
    } 
} 

Посмотрите на перегрузку Validate(), как может иметь абстрактный класс определения, как это?

ответ

2

Абстрактный класс должен иметь по крайней мере один абстрактный метод. Это не значит, что он не может определить конкретные методы. Одним из способов использования этого свойства является шаблон шаблона метода шаблонов, который позволяет вам определить алгоритм таким образом, чтобы его можно было изменять подклассами.

+0

Да - абстрактные методы - это не интерфейсы. –

+0

Фактически абстрактный класс не может иметь абстрактного метода (вы можете проверить его), хотя это не обычный способ определения абстрактных классов. –

+0

Хмм ... интересно, спасибо! – Soham

Смежные вопросы