2014-10-28 3 views
2

Я понимаю, что с .NET 4.5 класс ReadOnlyCollection<T> реализует новый интерфейс IReadOnlyCollection<T>, но я ограничен старой версией библиотеки, которая этого не имеет.Экспозиция IList <T> или ReadOnlyCollection <T> для свойства только для чтения?

Я хотел бы знать, какие лучше считается лучшей практикой:

public sealed class OptionA { 

    /// <summary> 
    /// Gets a read-only list of numbers. 
    /// </summary> 
    public ReadOnlyCollection<int> SomeNumbers { 
     get { return new ReadOnlyCollection<int>(_someNumbers); } 
    } 

    ... 

} 

public sealed class OptionB { 

    /// <summary> 
    /// Gets a read-only list of numbers. 
    /// </summary> 
    public IList<int> SomeNumbers { 
     get { return new ReadOnlyCollection<int>(_someNumbers); } 
    } 

    ... 

} 
+0

Лучшая практика при каких обстоятельствах? Это зависит от того, какой вы хотите. –

+0

Нет смысла указывать программисту-клиенту, что метод Add() будет работать. –

+0

@BartoszKP Так как 'IList ' предоставляет произвольный доступ и 'IEnumerable ' does not. –

ответ

3

Вы также можете использовать IEnumerable<T> - это сделает ваш код, как слабосвязанным как можно в этом случае. Она также обеспечивает произвольный доступ с ElementAt<T> метода, который будет работать с O (1) сложности, если фактический тип реализует IList<T>:

Если тип источника реализует IList<T>, используется, что реализация для получения элемента по указанному индексу. В противном случае этот метод получает указанный элемент.

Разоблачение IList<T> или ReadOnlyCollection<T> может быть полезно, если вы действительно хотели бы подчеркнуть тот факт, что случайный доступ со сложностью постоянного времени доступен. Решая, какой из них действительно зависит от конкретного сценария.

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

  • Нет связанных вопросов^_^