Способ сохранить метод в переменной?

#c# #variables #methods

#c# #переменные #методы

Вопрос:

Здравствуйте, я новичок в программировании. В принципе, мне нужно сохранить метод A из класса A в переменной A из класса B внутри метода из класса B, но, похоже, я не могу найти способ.

Чтобы привести пример: Класс A

 public void methodA()
{
*method*
}
  

Класс B

 Delegate variableA; //I believe using Delegate is wrong

public void methodB();
{
variableA = ClassA.methodA();
}
  

Тогда в классе B был бы другой метод, который будет использовать переменную с сохраненным методом.

 public void methodC();
{
variableA;
}
  

Это не точный код, который у меня есть, но в основном суть его такова. Приветствуется любая помощь 🙂

Редактировать: Спасибо всем за помощь!

Комментарии:

1. Используйте Action , например

2. Вы можете использовать Action и Func делегаты для хранения методов.

Ответ №1:

ClassA определение:

 public class ClassA
{
    public void MethodA() 
    {
        Console.WriteLine("Hello World!");
    }
}
  

ClassB определение:

 public class ClassB
{
    private Action VariableA { get; set; }

    public void MethodB(ClassA classA)
    {
        VariableA = classA.MethodA;
    }

    public void MethodC()
    {
        VariableA();
    }
}
  

Program определение:

 static void Main(string[] args)
{
    ClassA classA = new ClassA();
    ClassB classB = new ClassB();
    classB.MethodB(classA);
    classB.MethodC();
    Console.ReadLine();
}
  

Ответ №2:

Вот пример:

 public class Test
   {
       private Action<int> hiddenMethod = new Action<int>((i) =>
       {
           Console.WriteLine(i);
       });

       public void PublicMethod(int i)
       {
           hiddenMethod(i);
       }
   }
  

И используя его:

 class Program
{
    static void Main(string[] args)
    {
        Test t = new Test();
        t.PublicMethod(21);
        Console.Read();
    }
}
  

Ответ №3:

Используйте отражение:

 public class A
{
    public void MethodA()
    {
        Console.WriteLine("MethodA");
    }

    public static void StaticMethodA()
    {
        Console.WriteLine("StaticMethodA");
    }
}

public class B
{
    MethodInfo mv = typeof(A).GetMethod("MethodA");
    MethodInfo smv = typeof(A).GetMethod("StaticMethodA");

    public void CheckA(bool useStatic)
    {
        if (useStatic) smv.Invoke(null, null);
        else mv.Invoke(new A(), null);
    }
}

class MainClass
{
    [STAThread]
    public static void Main(string[] args)
    {
        var b = new B();
        b.CheckA(true);
        b.CheckA(false);
    }
}
  

Смотрите подробности в MSDN.