Ответ 1
В большинстве случаев, когда вы наследуете System.Array
, используется один размерный массив. как:
int[] a1 = new int[2];
Когда вы определяете int[]
, это неявно выводится из типа System.Array
типа @Sergey Rybalkin. В этом случае метод 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
, реализованный как экземпляр, и перегрузка реализована как статическая.
Каждый из них используется в другом контексте. Экземпляр используется, если вы используете один и тот же шаблон несколько раз. Статический, когда вы используете шаблон в вашем коде уникальное время.