Pourquoi les méthodes Array ne sont-elles pas intégrées à une instance Array?

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

  •  10-07-2019
  •  | 
  •  

Question

Désolé pour ce qui est probablement une question idiote mais elle me dérange ...

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

char c = 'c';
//why
char.IsLetter(c);
//instead of
c.Isletter();
Était-ce utile?

La solution

Merci à Pedro d'Aquino d'avoir identifié ces autres questions qui apportent des réponses.

Le point fondamental est que les méthodes d'instance sur les structures ne sont pas thread-safe mais que les méthodes statiques le sont.

Voir les questions suivantes:

Autres conseils

Ce sont des méthodes utilitaires qui n'ont pas besoin d'appartenir à ces classes. Cela renforce le Principe de responsabilité unique

(modifier) ??Je confondais avec Java

( À propos des membres statiques ):

  

Les membres statiques de la classe peuvent être utilisés pour   données séparées et le comportement qui est   indépendant de toute identité d'objet:   les données et les fonctions ne changent pas   indépendamment de ce qui arrive à la   objet. Les classes statiques peuvent être utilisées   quand il n'y a pas de données ou de comportement dans   la classe qui dépend de l'objet   identité.

Le point de vue thread-safe est également une bonne raison.

Vous pouvez le faire vous-même si vous utilisez .NET 3.0, en utilisant des méthodes d'extension:

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

puis appelez-le comme suit: c.IsLetter ()

Ou faites ce que vous voulez. La même chose au tri

C'est une décision de mise en œuvre. Je ne sais pas ce qui se passait dans les têtes du concepteur du framework, mais je pense qu'une des raisons est de permettre de trier un grand nombre de types personnalisés avec un minimum d'effort.

Toute classe qui implémente iComparable peut être placée dans un tableau et triée. Si c’était une méthode du tableau, il me faudrait alors écrire un nouveau type de tableau pour mon type personnalisé.

De même, comme d'autres l'ont déjà noté, les types primitifs nécessitent cette conception de tableau.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top