¿Por qué los métodos de matriz no están integrados en una instancia de matriz?
Pregunta
Perdón por lo que probablemente sea una pregunta tonta pero me está molestando ...
int[] i = {3, 2, 1};
//why
Array.Sort(i);
//instead of
i.Sort();
char c = 'c';
//why
char.IsLetter(c);
//instead of
c.Isletter();
Solución
Gracias a Pedro d'Aquino por identificar estas otras preguntas que brindan respuestas.
El punto básico es que los métodos de instancia en estructuras no son seguros para subprocesos, pero los métodos estáticos sí lo son.
Vea estas preguntas:
Otros consejos
Estos son métodos de utilidad que no necesitan pertenecer a estas clases. Esto refuerza el Principio de responsabilidad única
(editar) Estaba confundiendo con Java
( Acerca de los miembros estáticos ):
Los miembros de clase estática se pueden usar para datos separados y comportamiento que es independiente de cualquier identidad de objeto: los datos y las funciones no cambian independientemente de lo que le pase al objeto. Se pueden usar clases estáticas cuando no hay datos o comportamiento en la clase que depende del objeto identidad.
El punto de vista seguro para subprocesos también es una buena razón.
Puede hacerlo usted mismo si usa .NET 3.0, utilizando métodos de extensión:
public static class Extensions
{
public static bool IsLetter(this chr)
{
return char.IsLetter(chr);
}
}
luego llámalo como: c.IsLetter ()
O hazlo como quieras. Lo mismo en la clasificación
Es una decisión de implementación. No sé qué estaba pasando por las cabezas del diseñador de marcos, pero creo que una de las razones es permitir que la variedad de tipos personalizados se ordene con el menor esfuerzo.
Cualquier clase que implemente iComparable se puede poner en una matriz y ordenar. Si se tratara de un método de la matriz, tendría que escribir un nuevo tipo de matriz para mi tipo personalizado.
Además, como otros señalaron, los tipos primitivos requieren este diseño de una matriz.