В C# функцию можно передать как переменную, используя делегаты, функциональные интерфейсы или лямбда-выражения. Вот несколько методов, которые можно использовать для достижения этой цели:
- Делегаты. Делегаты — это типобезопасный способ инкапсуляции метода и передачи его в качестве параметра. Вы можете определить делегата, который соответствует сигнатуре функции, которую вы хотите передать, а затем назначить функцию экземпляру делегата. Например:
delegate void MyFunctionDelegate(int x);
void MyFunction(int x)
{
// Code here
}
void ProcessFunction(MyFunctionDelegate func)
{
func(42);
}
// Usage
ProcessFunction(MyFunction);
- Функциональные интерфейсы (C# 9 или более поздние версии). В C# 9 представлены функциональные интерфейсы, которые представляют собой интерфейсы с одним абстрактным методом. Вы можете определить интерфейс с желаемой сигнатурой метода, а затем передать лямбда-выражение или группу методов, соответствующую интерфейсу. Например:
interface IMyFunction
{
void Invoke(int x);
}
void MyFunction(int x)
{
// Code here
}
void ProcessFunction(IMyFunction func)
{
func.Invoke(42);
}
// Usage
ProcessFunction(MyFunction);
- Лямбда-выражения. Лямбда-выражения позволяют определить анонимную функцию и передать ее непосредственно в качестве параметра. Вы можете использовать делегат
Actionили определить собственный делегат с нужной сигнатурой. Например:
void ProcessFunction(Action<int> func)
{
func(42);
}
// Usage
ProcessFunction(x => {
// Code here
});