C # и указатель на член

Нужно вызвать функцию для объекта определенного типа, но я хочу, чтобы вызывающая сторона указала функцию, которую я вызываю.

В C ++ я могу использовать указатель на член, как это

class C
{
void F(void (A::*F)(int));
}

Есть ли какой-нибудь эквивалент C #?

Никаких массивов функций или каких-либо хитростей, таких как переключатели, пожалуйста. Я хочу, чтобы это решение работало, даже если добавлена ​​новая функция, а сигнатура функции соответствует требованиям.

РЕДАКТИРОВАТЬ:
Как я прочитал: Делегаты похожи на указатели функций C ++, но безопасны для типов.

Но мне нужен указатель на функцию-член. Например. в своей функции я приобретаю определенный объект:

var properties = manager.GetProperties();

и теперь нужно получить свойства определенного типа:

var type1 = properties.GetType1();

но мне нужно что-то подобное

var typeX = properties.GetTypeX();

чтобы получить запрошенный пользователем тип для этого вызова функции. Какой TypeX должен быть?

Где Type1..N имеют общий базовый класс, и мне нужно работать с этим классом.

-1

Решение

Да, это называется делегаты

Есть два стандартных: Func<T> а также Action<T>

3

Другие решения

В C # есть делегаты указать сигнатуру функции, которую вы хотите где-то передать.

Ваш код должен попробовать что-то вроде этого:

class Program
{
static void Write(int i)
{
Console.Write(i);
}

static void Main(string[] args)
{
C c = new C { FunctionToExecute = Write };
c.SomeMethod(5);
}
}

delegate void D(int F);

class C
{
public D FunctionToExecute { get; set; }

public void SomeMethod(int arg)
{
FunctionToExecute(arg);
}
}

D указывает подпись, FunctionToExecute — указатель на то, что вы хотите выполнить.

Если вы хотите передать объекты неизвестного типа, то есть дженерики. Или я не совсем понимаю, чего ты хочешь. Упомянутые здесь Action и Func являются общими делегатами.

1

По вопросам рекламы [email protected]