Почему методы Array не встроены в экземпляр Array? - PullRequest
10 голосов
/ 24 июня 2009

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

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

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

Ответы [ 4 ]

4 голосов
/ 24 июня 2009

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

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

Смотрите эти вопросы:

2 голосов
/ 24 июня 2009

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

(правка) Я путал с Java

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

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

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

1 голос
/ 24 июня 2009

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

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

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

1 голос
/ 24 июня 2009

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

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

, затем назовите это как: c.IsLetter ()

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

...