# data[].attributes.body
La programación por eventos es un paradigma en el que el flujo de ejecución de un programa está determinado por eventos que ocurren, como clics de mouse, pulsaciones de teclas u otras interacciones del usuario. En lugar de seguir una secuencia lineal de instrucciones, el programa responde a eventos y ejecuta código asociado a cada evento específico. Esto se utiliza comúnmente en entornos de desarrollo de interfaces de usuario y aplicaciones interactiv

# data[].attributes.body
Visual Basic (VB) es un lenguaje de programación desarrollado por Microsoft. Es conocido por su enfoque en la programación visual y su facilidad de uso. Visual Basic permite a los programadores crear aplicaciones para el entorno Windows utilizando una interfaz gráfica de usuario (GUI). Fue diseñado originalmente para simplificar el desarrollo de aplicaciones Windows mediante la incorporación de un entorno de desarrollo integrado (IDE) que facilita la creación de interfaces gráficas y la escritura de código.

A lo largo de los años, ha habido varias versiones de Visual Basic, siendo Visual Basic 6.0 y Visual Basic .NET dos de las versiones más conocidas. Visual Basic .NET (VB.NET) es una versión más moderna que se integra con el marco .NET de Microsoft y proporciona características más avanzadas. Sin embargo, algunas aplicaciones todavía pueden usar versiones más antiguas de Visual Basic.

# data[].attributes.body
En programación, un objeto es una instancia de una clase. Una clase es un plano o un diseño que define un conjunto de propiedades y métodos comunes a todos los objetos de ese tipo. Los objetos son entidades que encapsulan datos y comportamientos relacionados. Cada objeto tiene un estado (representado por sus propiedades) y un comportamiento (representado por sus métodos).

Por ejemplo, si tienes una clase "Coche", un objeto sería una instancia específica de esa clase, como un coche particular con características únicas. Los objetos permiten la organización y estructuración del código a través de la programación orientada a objetos (OOP), facilitando la modularidad y el reuso del código.

# data[].attributes.body
n programación, las propiedades suelen referirse a características o atributos de un objeto. Estas propiedades describen el estado o comportamiento de un elemento en el programa. Por ejemplo, si estás trabajando con un objeto "auto", algunas de sus propiedades podrían ser "color", "modelo" o "velocidad". Las propiedades permiten acceder y manipular información específica sobre un objeto dentro del código.

# data[].attributes.attachment_link.title
Propiedades: Guía de programación de C# - C#

# data[].attributes.attachment_link.description
Una propiedad de C# es un miembro que usa métodos de descriptor de acceso para leer, escribir o calcular el valor de un campo privado como si fuera un miembro de datos público.

# data[].attributes.body
En programación, los eventos son sucesos o situaciones que ocurren durante la ejecución de un programa y que pueden desencadenar acciones específicas. Estos eventos pueden ser interacciones del usuario, como hacer clic en un botón, o sucesos del sistema, como recibir datos por una conexión de red. Los programadores utilizan manejadores de eventos para definir qué acciones deben llevarse a cabo en respuesta a un evento particular. Este concepto es fundamental en entornos de desarrollo de interfaces de usuario y en la programación orientada a eventos, donde las acciones del programa se desencadenan por eventos específicos.

# data[].attributes.body
En programación, los métodos son bloques de código que realizan una tarea específica o llevan a cabo una operación particular. También se les conoce como funciones cuando están definidos fuera de clases en lenguajes de programación funcionales. Los métodos son parte de objetos o clases y encapsulan la lógica para realizar operaciones específicas. Pueden recibir parámetros como entrada, procesar esa entrada y devolver un resultado.

Por ejemplo, en el contexto de un objeto "coche", un método podría ser "arrancar()", que contiene el código necesario para poner en marcha el motor. El uso de métodos ayuda a organizar y estructurar el código, facilitando la reutilización y el mantenimiento del programa.

# data[].attributes.attachment_link.readable_text
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 C#, todas las instrucciones ejecutadas se realizan en el contexto de un método.

El método Main es el punto de entrada para cada aplicación de C# y se llama mediante Common Language Runtime (CLR) cuando se inicia el programa. En una aplicación que usa instrucciones de nivel superior, el compilador genera el método Main y contiene todas las instrucciones de nivel superior.

Nota

En este artículo se analizan los métodos denominados. Para obtener información sobre las funciones anónimas, consulte Expresiones lambda.

Firmas de método

Los métodos se declaran en una clase, struct 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. Todas estas partes forman la firma del método.

Importante

Un tipo de valor devuelto de un método no forma parte de la firma del método con el objetivo de sobrecargar el método. Sin embargo, forma parte de la firma del método al determinar la compatibilidad entre un delegado y el método que señala.

Los parámetros de método se encierran entre paréntesis y se separan por comas. Los paréntesis vacíos indican que el método no requiere parámetros. Esta clase contiene cuatro métodos:

abstract class Motorcycle { // Anyone can call this. public void StartEngine() {/* Method statements here */ } // Only derived classes can call this. protected void AddGas(int gallons) { /* Method statements here */ } // Derived classes can override the base class implementation. public virtual int Drive(int miles, int speed) { /* Method statements here */ return 1; } // Derived classes must implement this. public abstract double GetTopSpeed(); }

Acceso a métodos

Llamar a un método en un objeto es como acceder 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. Los métodos de la clase Motorcycle se pueden llamar como en el ejemplo siguiente:

class TestMotorcycle : Motorcycle { public override double GetTopSpeed() { return 108.4; } static void Main() { TestMotorcycle moto = new TestMotorcycle(); moto.StartEngine(); moto.AddGas(15); moto.Drive(5, 20); double speed = moto.GetTopSpeed(); Console.WriteLine("My top speed is {0}", speed); } }

Parámetros de métodos frente a argumentos

La definición del método especifica los nombres y tipos de todos los parámetros necesarios. Si el código de llamada llama al métodos, 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) utilizado en el código de llamada no tiene que ser el mismo que el parámetro con nombre definido en el método. Por ejemplo:

public void Caller() { int numA = 4; // Call with an int variable. int productA = Square(numA); int numB = 32; // Call with another int variable. int productB = Square(numB); // Call with an integer literal. int productC = Square(12); // Call with an expression that evaluates to int. productC = Square(productA * 3); } int Square(int i) { // Store input argument in a local variable. int input = i; return input * input; }

Pasar por referencia frente a pasar por valor

De forma predeterminada, cuando se pasa una instancia de un tipo de valor a un método, se pasa su copia en lugar de la propia instancia. Por lo tanto, los cambios realizados en el argumento no tienen ningún efecto en la instancia original del método de llamada. Para pasar una instancia de tipo de valor por referencia, use la palabra clave ref. Para obtener más información, vea Pasar parámetros de tipo de valor (Guía de programación de C#).

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 objeto concreto, recibe un argumento que indica la ubicación del objeto. Si cambia un miembro del objeto mediante esta referencia, el cambio se refleja en el argumento del método de llamada, incluso si pasa el objeto por valor.

Crea un tipo de referencia mediante la palabra clave class, como se muestra en el siguiente ejemplo:

public class SampleRefType { public int value; }

Ahora, si se pasa un objeto basado en este tipo a un método, también se pasa una referencia al objeto. En el ejemplo siguiente se pasa un objeto de tipo SampleRefType al método ModifyObject:

public static void TestRefType() { SampleRefType rt = new SampleRefType(); rt.value = 44; ModifyObject(rt); Console.WriteLine(rt.value); } static void ModifyObject(SampleRefType obj) { obj.value = 33; }

Fundamentalmente, el ejemplo hace lo mismo que el ejemplo anterior en el que se pasa un argumento por valor a un método. Pero, debido a que se utiliza un tipo de referencia, el resultado es diferente. La modificación que se lleva a cabo en ModifyObject al campo value del parámetro, obj, también cambia el campo value del argumento, rt, en el método TestRefType . El método TestRefType muestra 33 como salida.

Para obtener más información sobre cómo pasar tipos de referencia por valor y por referencia, vea Pasar parámetros Reference-Type (Guía de programación de C#) y Tipos de referencia (Referencia de C#).

Valores devueltos

Los métodos pueden devolver un valor al autor de llamada. Si el tipo de valor devuelto (el tipo que aparece antes del nombre de método) no es void, el método puede devolver el valor mediante la instrucción return. Una instrucción con la palabra clave return seguida de un valor que coincide con el tipo de valor devuelto devolverá este valor al autor de llamada del método.

El valor se puede devolver al autor de la llamada por valor o por referencia. Los valores se devuelven al autor de la llamada mediante referencia si la palabra clave ref se usa en la firma del método y sigue cada palabra clave return. Por ejemplo, la siguiente firma del método y la instrucción return indican que el método devuelve una variable denominada estDistance mediante referencia al autor de la llamada.

public ref double GetEstimatedDistance() { return ref estDistance; }

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 alcance el final del bloque de código. Los métodos con un tipo de valor devuelto no nulo son necesarios para usar la palabra clave return para devolver un valor. Por ejemplo, estos dos métodos utilizan la palabra clave return para devolver enteros:

class SimpleMath { public int AddTwoNumbers(int number1, int number2) { return number1 + number2; } public int SquareANumber(int number) { return number * number; } }

Para utilizar un valor devuelto de un método, el método de llamada puede usar la llamada de método en cualquier lugar; un valor del mismo tipo sería suficiente. También puede asignar el valor devuelto a una variable. Por ejemplo, los dos siguientes ejemplos de código logran el mismo objetivo:

int result = obj.AddTwoNumbers(1, 2); result = obj.SquareANumber(result); // The result is 9. Console.WriteLine(result);

result = obj.SquareANumber(obj.AddTwoNumbers(1, 2)); // The result is 9. Console.WriteLine(result);

Usar una variable local, en este caso, result, para almacenar un valor es opcional. La legibilidad del código puede ser útil, o puede ser necesaria si debe almacenar el valor original del argumento para todo el ámbito del método.

Para usar un valor devuelto mediante referencia de un método, debe declarar una variable local de tipo ref si pretende modificar su valor. Por ejemplo, si el método Planet.GetEstimatedDistance devuelve un valor Double mediante referencia, puede definirlo como una variable local de tipo ref con código como el siguiente:

ref double distance = ref Planet.GetEstimatedDistance();

Devolver una matriz multidimensional de un método, M, que modifica el contenido de la matriz no es necesario si la función de llamada ha pasado la matriz a M. Puede devolver la matriz resultante de M para obtener un estilo correcto o un flujo funcional de valores, pero no es necesario porque C# pasa todos los tipos de referencia mediante valor, y el valor de una referencia de matriz es el puntero de la matriz. En el método M, los cambios en el contenido de la matriz los puede observar cualquier código que tenga una referencia a la matriz, como se muestra en el ejemplo siguiente:

static void Main(string[] args) { int[,] matrix = new int[2, 2]; FillMatrix(matrix); // matrix is now full of -1 } public static void FillMatrix(int[,] matrix) { for (int i = 0; i < matrix.GetLength(0); i++) { for (int j = 0; j < matrix.GetLength(1); j++) { matrix[i, j] = -1; } } }

Métodos asincrónicos

Mediante la característica asincrónica, puede invocar métodos asincrónicos sin usar definiciones de llamada explícitas ni dividir manualmente el código en varios métodos o expresiones lambda.

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 se progreso del método se suspende hasta que se completa la tarea esperada. Cuando se completa la tarea, la ejecución puede reanudarse en el método.

Nota

Un método asincrónico vuelve al autor de la llamada cuando encuentra el primer objeto esperado que aún no se ha completado o cuando llega al final del método asincrónico, lo que ocurra primero.

Un método asincrónico normalmente tiene un tipo de valor devuelto de Task<TResult>, Task, IAsyncEnumerable<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 esperar un método asincrónico que devuelve void y el autor de llamada a un método que no devuelve ningún valor no puede capturar ninguna excepción producida por este. Un método asincrónico puede tener cualquier tipo de valor devuelto similar a una tarea.

En el ejemplo siguiente, DelayAsync es un método asincrónico con un tipo de valor devuelto de Task<TResult>. DelayAsync tiene una instrucción return que devuelve un entero. Por lo tanto, la declaración del método de DelayAsync debe tener un tipo de valor devuelto de Task<int>. Dado que el tipo de valor devuelto es Task<int>, la evaluación de la expresión await en DoSomethingAsync genera un entero, como se demuestra en la siguiente instrucción: int result = await delayTask.

El método Main es un ejemplo de método asincrónico con un tipo de valor devuelto Task. Va al método DoSomethingAsync, y como se expresa con una sola línea, puede omitir las palabras clave async y await. Dado que DoSomethingAsync es un método asincrónico, la tarea de la llamada a DoSomethingAsync debe esperar, como se muestra en la siguiente instrucción: await DoSomethingAsync();.

class Program { static Task Main() => DoSomethingAsync(); static async Task DoSomethingAsync() { Task<int> delayTask = DelayAsync(); int result = await delayTask; // The previous two statements may be combined into // the following statement. //int result = await DelayAsync(); Console.WriteLine($"Result: {result}"); } static async Task<int> DelayAsync() { await Task.Delay(100); return 5; } } // Example output: // Result: 5

Un método aisncrónico no puede declarar ningún parámetro ref u out , pero puede llamar a los métodos que tienen estos parámetros.

Para obtener más información sobre los métodos asincrónicos, consulte los artículos Programación asincrónica con async y await y Tipos de valor devueltos asincrónicos.

Definiciones de cuerpos de expresión

Es habitual tener definiciones de método que simplemente hacen las devoluciones de forma inmediata con el resultado de una expresión, o que tienen una sola instrucción como cuerpo del método. Hay un acceso directo de sintaxis para definir este método mediante =>:

public Point Move(int dx, int dy) => new Point(x + dx, y + dy); public void Print() => Console.WriteLine(First + " " + Last); // Works with operators, properties, and indexers too. public static Complex operator +(Complex a, Complex b) => a.Add(b); public string Name => First + " " + Last; public Customer this[long id] => store.LookupCustomer(id);

Si el método devuelve void o si es un método asincrónico, el cuerpo del método debe ser una expresión de instrucción (igual que con las expresiones lambda). Para las propiedades y los indexadores, solo deben leerse, y no usa la palabra clave de descriptor de acceso get.

Iterators

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. La ejecución se reinicia desde esa ubicación la próxima vez que se llama el iterador.

Llame a un iterador a partir del código de cliente mediante una instrucción foreach .

El tipo de valor devuelto de un enumerador puede ser IEnumerable, IEnumerable<T>, IAsyncEnumerable<T>, IEnumerator o IEnumerator<T>.

Para obtener más información, consulta Iteradores.

Especificación del lenguaje C#

Para obtener más información, consulte la Especificación del lenguaje C#. La especificación del lenguaje es la fuente definitiva de la sintaxis y el uso de C#.

Consulte también

# data[].attributes.attachment_link.title
Métodos: Guía de programación de C# - C#

# data[].attributes.attachment_link.description
En C#, un método es un bloque de código que contiene una serie de instrucciones. Un programa ejecuta las instrucciones mediante la llamada al método y la especificación de argumentos.