2010-11-01 4 views
3

Donnez la classe suivante:Suppression accesseurs d'un objet

public Person 
{ 
public string Name {get; set;} 
public string Age {get; set; } 
} 

Si je voulais alors un retour IList est de toute façon de retourner la liste sera toutes les fonctionnalités d'un IList mais avec les setters enlevés? Peut-être avec une méthode d'extension pour supprimer les setters. J'imagine que tu devrais utiliser la réflexion mais est-ce la seule façon que cela puisse être fait? Serait-ce faisable d'un point de vue vitesse/mise en œuvre.

Je me demandais simplement comment cela pouvait être fait, ce n'est pas une conception réelle. Et je suis conscient de juste renvoyer un IEnumerable, ou IEnumerable avec un saut ou un rendement qui résoudrait pour ce problème.

Merci

+0

Y a-t-il une raison pour le nom et l'âge d'avoir un setter public? Sinon, vous pouvez faire {get; ensemble privé; } et juste le définir dans le constructeur. – Doggett

Répondre

5

avec les setters supprimés de la classe Person? créer

IReadonlyPerson 
{ 
    string Name { get; } 
    string Age { get; } 
} 

de mettre en œuvre (il le fait déjà), puis retourner un IList. Si vous parlez de la mutabilité de l'IList, regardez la réponse de @ RPM1984.

1

Pourquoi ne pas simplement retourner un ReadOnlyCollection?

+0

si vous utilisez une ReadOnlyCollection vous pouvez toujours modifier les valeurs en utilisant l'indexeur comme [0] .Name = "Nouveau Nom"; La seule chose immuable est la collection elle-même je ne peux pas ajouter/supprimer des éléments mais je peux encore modifier les valeurs internes. – JJK

+0

Oui, je sais. Je n'étais pas sûr de ce que vous vouliez éviter. La réponse de @Alex Lo est la voie à suivre dans ce cas. – RPM1984

Questions connexes