J'essaie de décider entre trois implémentations différentes. J'ai une interface IPerson, tous les types de personnes (c'est-à-dire policier, étudiant, avocat) mettent en œuvre ceci. Chaque type de personne doit avoir une AddressLocation différente (par exemple, la maison, le bureau, l'envoi). Cet emplacement ne change jamais, donc il peut être statique/en lecture seule. Les personnes sont gérées de manière générique, donc ma méthode save SavePerson (IPerson person) prend tout ce qui hérite de l'interface IPerson et j'ai une méthode LoadPerson (int ID) qui prend un identifiant.propriété publique vs static readonly
Ma solution initiale consistait à ajouter une propriété DefaultLocation à IPerson et n'avoir qu'un getter. De cette façon, je peux utiliser des méthodes génériques pour enregistrer les données. Un problème survient lorsque j'essaie de charger les données car je n'ai pas encore d'instance de la classe, donc je ne peux pas référencer la propriété. D'autre part, je peux créer une propriété DefaultLocation readonly statique publique sur chacun de mes types de personnes. Dans ce cas, je peux appeler Student.DefaultLocation et le passer dans la méthode de chargement de mes données.
De quel côté devrais-je aller et pourquoi? Les deux semblent avoir des avantages et des inconvénients. Une troisième option m'est venue alors que je tapais cette question: Et si j'utilisais une propriété publique en lecture seule qui pouvait être référencée sans instanciation de la classe et qui utilisait une propriété publique sans setter qui pourrait être appelée à partir des méthodes génériques?
conseils de Per Jon je suis allé avec:
public interface IPerson
{
LocationType DefaultLocation { get; }
}
public class PoliceOfficer : IPerson
{
public static readonly LocationType _DefaultLocationType = LocationType.Office;
public LocationType { get { return _DefaultLocationType; } }
}