Member 10869569 Ответов: 2

C# передача одного метода в качестве параметра


Привет всем, я пытаюсь сделать что-то вроде этого:

У меня есть класс под названием "Работа". Внутри этого класса у меня есть метод под названием "Update". Я хочу передать метод в качестве параметра с нулевыми аргументами. См. пример ниже.

Экс:


Классная Работа

public Job(){
   //
}

public void Update(wantToPassMethodHere){
   //Execute wantToPassMethodHere method
}


основной класс

private Job job = new Job();

public void Update(){
   job.Update(WriteMessage());
}


public void WriteMessage(){
   Console.WriteLine("hi");
}


Возможно ли это?

Что я уже пробовал:

Я пытался исследовать этот вопрос, но не смог найти приемлемого решения.

[no name]

Делегаты - https://msdn.microsoft.com/en-us/library/ms173172.aspx просто погуглите свой точный вопрос.

2 Ответов

Рейтинг:
2

Karthik_Mahalingam

Да это возможно, использовать Учебник Для Делегатов (C#)[^]

см. этот пример:

public delegate void MyMethod();
public delegate int AnotherMethodWithParams(int a);

public class MyClass
{
    public MyClass ()
	{
        var obj =  new Job();
        obj.Update(DoSomething);
       int answer =  obj.Square(Square);
       
	}
    void DoSomething() { 
        // your code
    }
    int Square(int a) { return a * a; }
}


 
public class Job
{ 

    public void Update(MyMethod method)
    {
        method.Invoke();
    }
    public int Square(AnotherMethodWithParams method)
    {
       return method.Invoke(2);
    }
}


Рейтинг:
2

Asad Raza Yazdani

Да, это возможно, вы можете достичь своей цели желания, используя

Action Delegate


О Делегате Действий
Этот делегат можно использовать для передачи метода в качестве параметра без явного объявления пользовательского делегата. Инкапсулированный метод должен соответствовать сигнатуре метода, определенной этим делегатом. Это означает, что инкапсулированный метод не должен иметь параметров и возвращаемого значения. (В C# метод должен возвращать void. В Visual Basic он должен быть определен подразделом…Конец Субконструкции. Это также может быть метод, возвращающий значение, которое игнорируется.) Как правило, такой метод используется для выполнения операции.

ПРИМЕР:-

Классная Работа

public class job
{
  public void update(Action wantToPassMethodHere)
  {
      wantToPassMethodHere();
   }
}


основной класс
public class Program
{
  public static void testMethod()
  {
     Console.WriteLine("Hello Test Method");
  }
  public static void Main(string[] args)
  {
    //Here you can instantiate your job class and called update method
    
     job jb = new job();
     jb.update(testMethod);
     
     //That's it you can test this code, This is working example.
  }
}


Примечание: - Если вы хотите узнать больше о делегате действий, вы можете прочитать здесь.
и здесь вы можете прочитать parameterize Action<t & gt; delegate.