Почему методы Array не встроены в экземпляр Array?

Извините за то, что, вероятно, является глупым вопросом, но это подталкивает меня...

int[] i = {3, 2, 1};
//why
Array.Sort(i);
//instead of
i.Sort();

char c = 'c';
//why
char.IsLetter(c);
//instead of
c.Isletter();

Ответ 1

Спасибо Педро д'Акино за то, что он определил эти другие вопросы, которые дают ответы.

Основной момент заключается в том, что методы экземпляров в структурах не являются потокобезопасными, но статические методы.

Смотрите следующие вопросы:

Ответ 2

Это утилиты, которые не должны принадлежать этим классам. Это усиливает принцип единой ответственности

(изменить) Я сбивал с толку Java

(О статических членах):

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

потокобезопасная точка зрения также является веской причиной.

Ответ 3

Вы можете сделать это самостоятельно, если используете .NET 3.0, используя методы расширения:

public static class Extensions
{
public static bool IsLetter(this chr)
{
 return char.IsLetter(chr);
}
}

тогда назовите его так: c.IsLetter()

Или сделай так, как хочешь. То же самое при сортировке

Ответ 4

Это решение для реализации. Я не знаю, что все проделывало в дизайнерах фреймворков, но я считаю, что одна причина состоит в том, чтобы отсортировать массив пользовательских типов с минимальными усилиями.

Любой класс, реализующий iComparable, может быть помещен в массив и отсортирован. Если это был метод массива, тогда мне пришлось бы писать новый тип массива для моего пользовательского типа.

Кроме того, как отмечали другие, примитивные типы требуют такой конструкции массива.