Извините за то, что, вероятно, является глупым вопросом, но это подталкивает меня...
int[] i = {3, 2, 1};
//why
Array.Sort(i);
//instead of
i.Sort();
char c = 'c';
//why
char.IsLetter(c);
//instead of
c.Isletter();
Извините за то, что, вероятно, является глупым вопросом, но это подталкивает меня...
int[] i = {3, 2, 1};
//why
Array.Sort(i);
//instead of
i.Sort();
char c = 'c';
//why
char.IsLetter(c);
//instead of
c.Isletter();
Спасибо Педро д'Акино за то, что он определил эти другие вопросы, которые дают ответы.
Основной момент заключается в том, что методы экземпляров в структурах не являются потокобезопасными, но статические методы.
Смотрите следующие вопросы:
Это утилиты, которые не должны принадлежать этим классам. Это усиливает принцип единой ответственности
(изменить) Я сбивал с толку Java
Статические члены класса могут использоваться для отдельные данные и поведение, которые независимо от любого идентификатора объекта: данные и функции не меняются независимо от того, что происходит с объект. Статические классы могут использоваться когда нет данных или поведения в класс, который зависит от объекта идентичность.
потокобезопасная точка зрения также является веской причиной.
Вы можете сделать это самостоятельно, если используете .NET 3.0, используя методы расширения:
public static class Extensions
{
public static bool IsLetter(this chr)
{
return char.IsLetter(chr);
}
}
тогда назовите его так: c.IsLetter()
Или сделай так, как хочешь. То же самое при сортировке
Это решение для реализации. Я не знаю, что все проделывало в дизайнерах фреймворков, но я считаю, что одна причина состоит в том, чтобы отсортировать массив пользовательских типов с минимальными усилиями.
Любой класс, реализующий iComparable, может быть помещен в массив и отсортирован. Если это был метод массива, тогда мне пришлось бы писать новый тип массива для моего пользовательского типа.
Кроме того, как отмечали другие, примитивные типы требуют такой конструкции массива.