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

StackOverflow https://stackoverflow.com/questions/1038406

  •  10-07-2019
  •  | 
  •  

Вопрос

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

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, может быть помещен в массив и отсортирован. Если бы это был метод массива, то мне пришлось бы написать новый тип Array для моего пользовательского типа.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top