Всегда интересовался, почему методы Array.Sort () и Array.IndexOf () сделаны статическими, а подобные ArrayList.Sort () и ArrayList.IndexOf () разработаны как методы-члены. Спасибо за любые идеи.
На мой взгляд, класс Array - это в основном представление класса массивов фиксированного размера, которые мы объявляем с помощью [] в программе (вы можете провести аналогию, например, int имеет представление класса (структуры) как System.Int32).
Также класс Array не содержит фактических данных массива ни в каких переменных экземпляра, но предоставляет только статические служебные функции, которые можно использовать для сортировки и поиска в объявленных массивах фиксированного размера.
С другой стороны, ArrayList - это класс коллекции, который обеспечивает реализацию массива динамического размера и имеет собственную структуру данных для хранения данных. Следовательно, указанные методы являются методами экземпляра, так что они могут работать с данными этого конкретного экземпляра.
Класс коллекции, такой как ArrayList
, инкапсулирует какое-то внутреннее хранилище (предположительно, массив, размер которого изменяется по мере необходимости, но это также может быть связанный список или какая-либо другая реализация). Для эффективных методов, таких как IndexOf
и Sort
, необходим доступ к базовому частному хранилищу, поэтому они должны быть методами instace.
С другой стороны, Array
не инкапсулирован, есть открытый доступ непосредственно к хранилищу. Методы Array.IndexOf
и Array.Sort
не требуют специального доступа к данным массива, поэтому они также могут быть статическими методами.
Но с таким же успехом они могут быть методами-членами, не так ли? int можно было бы переименовать в integer, потому что он более удобен для чтения непрограммистам, верно?
Хороший отзыв Ганса Пассанта здесь