posicion - arraylist c# obtener elemento
¿Por qué la mayoría de los métodos de System.Array son estáticos? (1)
La mayor parte del tiempo que hereda de System.Array
está usando una matriz de una sola dimensión. me gusta:
int[] a1 = new int[2];
Cuando se define int[]
esto deriva implícitamente del tipo System.Array
como @Sergey Rybalkin dice. En este caso, el método IndexOf
seguramente se implementaría mejor como método de instancia y no como método estático.
Pero hay otros tipos que heredan de System.Array como matrices de múltiples dimensiones. En este caso (dimensión múltiple) el método IndexOf
no tiene sentido.
Prueba esto:
int[,] arr = new int[2, 2];
arr[0, 0] = 3; arr[1, 0] = 4;
arr[0, 1] = 5; arr[1, 1] = 6;
Array.IndexOf(arr, 4);
La última opción arroja una excepción RankException con el mensaje "Only single dimension arrays are supported here."
Quizás, y muy probablemente, debido a que este método se implementa como estático.
...
Acerca del comentario Is there a main principle behind the decision, whether to make a method static or not?
Hay, y el principio es bastante simple. El método de instancia representa una acción o comportamiento de un objeto. El método estático es una función del sistema que es lógica relacionada con la clase, o en algunos casos, un método al que desea llamar sin crear una instancia de la clase.
Piense en la clase System.Math
, ¿qué tan complicado será si necesita matemáticas de instancia cada vez que quiera llamar a un método como Sqrt
o Pow
?
El último ejemplo que le daré es la clase System.Text.RegularExpressions.Regex
. Esta clase tiene un método de Match
implementado como instancia y una sobrecarga implementada como estática.
Cada una se utiliza en un contexto diferente. La instancia se utiliza cuando se utiliza el mismo patrón varias veces. La estática cuando usas el patrón una vez única en tu código.
Supongo que esto es más una cuestión de diseño de marco. Recientemente me pregunté por qué la mayoría de los métodos en System.Array son estáticos. Mi primera reacción es usar, por ejemplo, IndexOf (objeto) en la instancia de Array, no como System.Array.IndexOf (matriz, objeto). ¿Hay un principio fundamental detrás de la decisión, si hacer un método estático o no?
Encontré esta pregunta: ¿ Cuándo es mejor usar funciones estáticas en ASP.NET?
Pero no me satisfizo: - /