2010-11-01 2 views
3

Дайте следующий класс:Удаление Accessors от объекта

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

Если бы я захотел, то Возвращаем IList будет в любом случае, чтобы вернуть список будет все функциональные возможности IList, но с сеттеров удалены? Возможно, с помощью метода расширения для удаления сеттеров. Я бы предположил, что вам придется использовать рефлексию, но разве это единственный способ сделать это? Будет ли это осуществимо с точки зрения скорости/реализации.

Мне просто интересно, как это можно сделать, это не настоящий дизайн. И я знаю, что просто возвращаю IEnumerable или IEnumerable с пропуском или доходностью, которая решила бы эту проблему.

Благодаря

+0

Есть ли причина, по которой имя и возраст имеют публичный сеттер? Если бы не ты мог сделать; частный набор; } и просто установите его в конструкторе. – Doggett

ответ

5

с сеттерами, удаленными от класса Person? создайте

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

есть ли у него реализация (он уже делает), а затем вернуть IList. если вы говорите о изменчивости взгляда IList на ответ @ RPM1984.

1

Почему не возвращают ReadOnlyCollection?

+0

, если вы используете ReadOnlyCollection, вы все равно можете изменить значения с помощью индексатора типа [0] .Name = "New Name"; Единственное неизменное - это сама коллекция, которую я не могу добавить/удалить элементы, но я все же могу изменить внутренние значения. – JJK

+0

Да, я знаю. Я не знал, что вы хотите предотвратить. Ответ @Alex Lo - это способ пойти в этом случае. – RPM1984

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