2010-04-24 9 views
1

Considérez ce morceau de code:Dans la bibliothèque d'entreprise, comment l'abstract Validator.cs a-t-il une définition de méthode?

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); 
    } 
} 

Regardez la surcharge Validate(), comment une classe abstraite des définitions comme celle-ci?

Répondre

2

Une classe abstraite doit avoir au moins une méthode abstraite. Cela ne signifie pas qu'il ne peut pas définir de méthodes concrètes. L'un des usages de cette propriété est le modèle de conception de la méthode de modèle qui vous permet de définir un algorithme de telle sorte qu'il puisse être modifié par des sous-classes.

+0

Oui - les méthodes abstraites ne sont pas des interfaces. –

+0

En fait, une classe abstraite ne peut avoir aucune méthode abstraite (vous pouvez la tester), bien que ce ne soit pas une manière habituelle de définir des classes abstraites. –

+0

hmm ... intéressant, merci! – Soham