Microsoft a ajouté une classe abstraite de base PluralizationService
au framework .NET - qui peut être utilisé à d'autres fins aussi bien!
public abstract class PluralizationService
{
public static PluralizationService CreateService(CultureInfo culture);
public abstract string Pluralize(string word);
public abstract string Singularize(string word);
}
Voir un billet de blog sur EF Pluralization qui explique en détail. Microsoft fournit quelques implémentations concrètes de ce service dans différentes langues/cultures, mais vous êtes totalement libre de créer le vôtre. Je ne sais pas comment les services de pluralisation fournis par EF4 fonctionnent - mais il s'agit probablement d'une combinaison de certaines règles linguistiques et d'une pléthore d'exceptions à gérer différemment. Ceux-ci sont très probablement stockés en tant que ressources ou d'une autre manière à l'intérieur des assemblées pertinentes.
Wow, c'est cool! Une question de plus - pourquoi ont-ils choisi une classe de base abstraite? Je pensais que la programmation sur une interface était préférable à la construction de hiérarchies d'héritage? –
Je n'étais pas là pour les réunions de conception :-) mais une classe de base abstraite peut implémenter un comportement de base hérité de tous les descendants - vous ne pouvez pas le faire avec une interface. Peut-être qu'ils avaient leurs raisons de faire quelque chose comme ça - pas sûr. –
Hmm. Selon "C# 4.0 in a Nutshell" - "Les membres abstraits sont comme des membres virtuels, sauf qu'ils ne fournissent pas une implémentation par défaut Cette implémentation doit être fournie par la sous-classe, sauf si cette sous-classe est également déclarée abstraite." La différence voudrait-elle spécifier des membres statiques (comme ils l'ont fait plus haut)? –