¿Por qué los métodos de matriz no están integrados en una instancia de matriz?

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

  •  10-07-2019
  •  | 
  •  

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();
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top