Почему большинство методов System.Array статические?

Я думаю, это больше вопрос дизайна фреймворка. Недавно я удивился, почему большинство методов в System.Array являются статическими. Моя внутренняя реакция всегда заключается в использовании, например, IndexOf(объект) в экземпляре Array, а не в качестве System.Array.IndexOf(массив, объект). Есть ли основной принцип, лежащий в основе решения, делать метод статичным или нет?

Я нашел этот вопрос: когда лучше всего использовать статические функции в ASP.NET

Но это меня не удовлетворило:-/

1 ответ

Наибольшее время вы наследуете System.Array использует массив одного измерения. лайк:

int[] a1 = new int[2];

Когда вы определяете int[] это неявно происходит от System.Array типа как @ Сергей Рыбалкин говорит. В этом случае метод IndexOf несомненно, будет лучше всего реализовано как метод экземпляра, а не как статический метод.

Но есть и другие типы, которые наследуются от System.Array, как многомерные массивы. В этом случае (многомерность) метод IndexOf не имеет смысла.

Проверьте это:

int[,] arr = new int[2, 2];

arr[0, 0] = 3; arr[1, 0] = 4;
arr[0, 1] = 5; arr[1, 1] = 6;

Array.IndexOf(arr, 4);

Последний лайк создает исключение RankException с сообщением "Only single dimension arrays are supported here."

Возможно, и, скорее всего, из-за этого этот метод реализован как статический.

...

О комментарии Is there a main principle behind the decision, whether to make a method static or not?

Есть, и принцип довольно прост. Метод экземпляра представляет действие или поведение объекта. Статический метод - это функция системы, которая логически связана с классом, или, в некоторых случаях, метод, который вы хотите вызвать без создания экземпляра класса.

Думать в System.Math Класс, как беспорядок будет, если вам нужно экземпляр математики каждый раз, когда вы хотите вызвать метод, как Sqrtили же Pow?

Последний пример, который я дам вам, - это System.Text.RegularExpressions.Regex учебный класс. Этот класс имеет Match метод реализован как экземпляр, а перегрузка реализована как статический.

Каждый из них используется в различном контексте. Экземпляр используется, когда вы используете один и тот же шаблон несколько раз. Статическое при использовании шаблона уникальное время в вашем коде.

Другие вопросы по тегам