#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.