Передать метод как параметр в конструктор с помощью делегатов - C#
Формулировка задачи:
Необходимо передать функцию как параметр в конструктор.
Я прочитал про делегаты и описал его:
В необходимом классе есть поле public FunctionChoice _Funct;
Я в конструкторе прописываю:
_Funct = new FunctionChoice(TargetFunction.RastriginFunction);
и всё работает.
но как бы мне этот TargetFunction.RastriginFunction передать в конструктор в качестве параметра?
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Attack { //делегат для выбора функции public delegate double FunctionChoice(double[] dArrayArguments, double[] dMinArgument, double[] dMaxArgument, bool bMax); class TargetFunction { //функция Растригина public static double RastriginFunction(double[] dArrayArguments, double[] dMinArgument, double[] dMaxArgument, bool bMax) { int iDimension = dArrayArguments.Length;//размерность массива double dResult = 0.0;//результат функции Растригина for (int i = 0; i < dArrayArguments.Length; i++) { //проверка на выход из области определения функции if (!CheckFunctionArgument(ref dArrayArguments[i], ref dMinArgument[i], ref dMaxArgument[i])) return ReturnInfinity(ref bMax); dResult += Math.Pow(dArrayArguments[i], 2) - 10 * Math.Cos(2 * Math.PI * dArrayArguments[i]); } dResult += 10 * iDimension; return dResult; } } }
Решение задачи: «Передать метод как параметр в конструктор с помощью делегатов»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { MyClass mc = new MyClass((Action<int, int>)delegate(int i, int j) { //Тут операторы, которые будут выполняться делегатом класса Console.WriteLine("{0}, {1}", i, j); }); mc.RunDelegate(); Console.ReadLine(); } } public class MyClass { private Action<int, int> innerDelegate; public MyClass(Action<int,int> paramDelegate) { innerDelegate = paramDelegate; } public void RunDelegate() { innerDelegate(10, 20); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д