Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

217
Vistas
¿Por qué esta delegación de multidifusión no funciona con funciones en C#?

Soy un novato en C# y ejerzo la delegación de multidifusión, escribí este código:

 class MyClass { public static double Calculate(int x, double z) { double Result = (x / z); return Result; } public static double Calculate2(int x, double z) { double Result = (x * z); return Result; } } public class Program { public delegate double MyDlgt(int Number1, double Number2); public static void Main() { Console.WriteLine("What is You First Value ? "); int NUM1 = int.Parse(Console.ReadLine()); Console.WriteLine("What is You Second Value ? "); Double NUM2 = Double.Parse(Console.ReadLine()); MyDlgt FirstDlgt = new MyDlgt(MyClass.Calculate); MyDlgt SecondDlgt = new MyDlgt(MyClass.Calculate2); Console.WriteLine("<---------Simple Delegate --------->"); Console.WriteLine("The Division Result is : " + FirstDlgt(NUM1, NUM2)); Console.WriteLine("The Multiply Result is : " + SecondDlgt(NUM1, NUM2)); Console.WriteLine(""); Console.WriteLine("<---------MultiCast Delegate --------->"); MyDlgt MultiCast = FirstDlgt + SecondDlgt; Console.WriteLine("The Result is : " + MultiCast(NUM1, NUM2)); Console.Read(); } }

La multidifusión solo muestra la segunda función, no sé por qué.

El resultado es

 What is You First Value ? 10 What is You Second Value ? 20 <---------Simple Delegate ---------> The Division Result is : 0.5 The Multiply Result is : 200 <---------MultiCast Delegate ---------> The Result is : 200

Intenté multicast con void y funcionó perfectamente.

 class MyClass { public static void Calculate(int x, double z) { Console.WriteLine("The Result is :"+ (x / z)); } public static void Calculate2(int x, double z) { Console.WriteLine("The Result is :" + (x * z)); } public static void Main() { Console.WriteLine("What is You First Value ? "); int NUM1 = int.Parse(Console.ReadLine()); Console.WriteLine("What is You Second Value ? "); Double NUM2 = Double.Parse(Console.ReadLine()); MyDlgt FirstDlgt = new MyDlgt(MyClass.Calculate); MyDlgt SecondDlgt = new MyDlgt(MyClass.Calculate2); Console.WriteLine("<---------Simple Delegate --------->"); FirstDlgt.Invoke(NUM1, NUM2); SecondDlgt.Invoke(NUM1, NUM2); Console.WriteLine(""); Console.WriteLine("<---------MultiCast Delegate --------->"); MyDlgt MultiCast = FirstDlgt + SecondDlgt; MultiCast(NUM1, NUM2); Console.ReadLine(); } } }

El resultado es correcto:

 What is You First Value ? 10 What is You Second Value ? 20 <---------Simple Delegate ---------> The Result is :0.5 The Result is :200 <---------MultiCast Delegate ---------> The Result is :0.5 The Result is :200

¿Por qué funciona con vacío y no con funciones con retorno?

Perdón por la extensión del post, gracias de antemano

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Según la especificación :

Si la invocación del delegado incluye parámetros de salida o un valor devuelto, su valor final provendrá de la invocación del último delegado de la lista.

Si necesita más control sobre los resultados individuales, use GetInvocationList() :

 foreach (MyDlgt myDlgt in MultiCast.GetInvocationList()) { double result = myDlgt(NUM1, NUM2); }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda