Запретить другим классам изменять список в классе - PullRequest
9 голосов
/ 29 января 2010

Если у меня есть класс, который содержит, например, список , и я хочу, чтобы другие классы могли видеть список, но не установить его, я могу объявить

public class SomeClass()
{
    public List<string> SomeList { get; }
}

Это позволит другому классу получить доступ к SomeList и не устанавливать его.

Однако, хотя вызывающий класс не может установить список, он может добавлять или удалять элементы. Как мне это предотвратить? Полагаю, я мог бы использовать поле и вернуть копию списка вместо использования свойства, но это не совсем правильно.

(Это должно быть очень просто, но я должен что-то упустить ...)

Ответы [ 4 ]

14 голосов
/ 29 января 2010

Вы не сможете использовать автообъект.

public class SomeClass()
{
    private List<string> someList;
    public IList<string> SomeList { 
        get { return someList.AsReadOnly(); }
    }
}
4 голосов
/ 29 января 2010

Вы хотите вернуть список в виде ReadOnly list . Вы можете сделать это с помощью следующего кода:

using System.Collections.ObjectModel;

public ReadOnlyCollection<string> GetList() {
    return SomeList.AsReadOnly();
}
2 голосов
/ 29 января 2010

Возврат IEnumerable<string>, который является неизменным. Геттер должен выглядеть так:

public IEnumerable<string> SomeList
{
   get
   {
      foreach(string s in someList) yield return s; // excuse my inline style here, zealots
      yield break;
   }
}
0 голосов
/ 29 января 2010
public class SomeClass()
{
    private List<string> _someList = new List<string>();

    public IList<string> SomeList 
    { 
         get { return _someList.AsReadOnly(); } 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...