Un método es un bloque de código que contiene una serie de instrucciones. Un programa hace que se ejecuten las instrucciones al llamar al método y especificando los argumentos de método necesarios. En este artículo se describen los métodos nombrados.
El método Main es el punto de entrada para cada aplicación de C# y lo llama Common Language Runtime (CLR) cuando se inicia el programa.
Declaración de Métodos
Los métodos se declaran en una clase, estructura o interfaz especificando el nivel de acceso, como public o private, modificadores opcionales como abstract o sealed, el valor devuelto, el nombre del método y cualquier parámetro de método.
Un tipo de retorno de un método no forma parte de la firma del método a efectos de sobrecarga del método.
Parámetros del Método
Los parámetros de método se incluyen entre paréntesis y están separados por comas. Los paréntesis vacíos indican que el método no requiere parámetros.
Lea también: ¿Qué es el Acuse de Recibo de la Declaración?
La definición del método especifica los nombres y tipos de todos los parámetros necesarios. Cuando el código llama al método, proporciona valores concretos denominados argumentos para cada parámetro. Los argumentos deben ser compatibles con el tipo de parámetro, pero el nombre del argumento (si existe) usado en el código de llamada no tiene que ser el mismo que el parámetro denominado definido en el método.
Llamada a Métodos
Llamar a un método en un objeto es como tener acceso a un campo. Después del nombre del objeto, agregue un punto, el nombre del método y paréntesis. Los argumentos se enumeran entre paréntesis y están separados por comas.
Paso de Argumentos por Valor y por Referencia
De forma predeterminada, cuando se pasa una instancia de un tipo de valor a un método, su copia se pasa en lugar de la propia instancia. Por lo tanto, los cambios en el argumento no tienen ningún efecto en la instancia original del método de llamada. Para pasar una instancia de tipo valor por referencia, use la palabra clave ref.
Cuando se pasa un objeto de un tipo de referencia a un método, se pasa una referencia al objeto. Es decir, el método no recibe el propio objeto, sino un argumento que indica la ubicación del objeto. Si pasa un objeto basado en este tipo a un método, se pasa una referencia al objeto.
Incluso cuando se pasa una referencia por valor, el resultado de las modificaciones internas puede ser diferente. La modificación que se realiza en el campo ModifyObject del parámetro value, también cambia el campo obj del argumento value en el método rt.
Lea también: Aprende a declarar el IVA correctamente
No es necesario devolver una matriz multidimensional de un método, Mque modifica el contenido de la matriz si la función que realiza la llamada pasó la matriz a M. Puede retornar la matriz resultante de M para mantener un buen estilo o un flujo funcional de valores, pero no es necesario porque C# pasa todos los tipos de referencia por valor y el valor de una referencia de matriz es el puntero a la matriz.
Valores de Retorno del Método
Los métodos pueden devolver un valor al autor de llamada. Si el tipo de valor devuelto (el tipo enumerado antes del nombre del método) no es void, el método puede devolver el valor mediante la instrucción return.
La palabra clave return también detiene la ejecución del método. Si el tipo de valor devuelto es void, una instrucción return sin un valor también es útil para detener la ejecución del método. Sin la palabra clave return, el método dejará de ejecutarse cuando llegue al final del bloque de código. Se requieren métodos con un tipo de valor devuelto no nulo para usar la palabra clave return para devolver un valor.
El valor se puede devolver al autor de llamada por valor o por referencia. Los valores se devuelven al llamador por referencia si la palabra clave ref se usa en la firma de método y sigue cada palabra clave return.
Para usar un valor devuelto desde un método, el método de llamada puede usar la propia llamada al método en cualquier lugar donde un valor del mismo tipo sería suficiente. También puede asignar el valor devuelto a una variable. El uso de una variable local, en este caso, result, para almacenar un valor es opcional. Para usar un valor devuelto por referencia desde un método, debe declarar una variable local ref si piensa modificar su valor.
Lea también: SAT: Anulación y Corrección
Métodos Asincrónicos
Si marca un método con el modificador async, puede usar el operador await en el método. Cuando el control alcanza una expresión await en el método asincrónico, el control se devuelve al autor de llamada y el progreso del método se suspende hasta que se completa la tarea esperada.
Normalmente, un método asincrónico tiene un tipo de valor devuelto de Task<TResult>, TaskIAsyncEnumerable<T> o void. El tipo de valor devuelto void se usa principalmente para definir controladores de eventos, donde se requiere un tipo de valor devuelto void. No se puede usar 'await' en un método asincrónico que devuelve void y el llamador de un método que devuelve void no puede capturar excepciones que lance el método.
Por ejemplo, si un método asincrónico como 'DelayAsync' tiene una instrucción return que devuelve un entero, su declaración de método debe tener un tipo de valor devuelto de Task<int>. El método Main es un ejemplo de un método asincrónico que tiene un tipo de valor devuelto de Task. Si va al método DoSomethingAsync y se expresa con una sola línea, puede omitir las palabras clave async y await.
Métodos con Cuerpo de Expresión
Es habitual tener definiciones de método que simplemente devuelvan inmediatamente con el resultado de una expresión o que tengan una sola instrucción como cuerpo del método. Si el método devuelve void o es un método asincrónico, el cuerpo del método debe ser una expresión de instrucción (igual que con lambdas).
Iteradores
Un iterador realiza una iteración personalizada en una colección, como una lista o matriz. Un iterador utiliza la instrucción yield return para devolver cada elemento de uno en uno. Cuando se alcanza una instrucción yield return, se recuerda la ubicación actual en el código.
