Нужно вызвать функцию для объекта определенного типа, но я хочу, чтобы вызывающая сторона указала функцию, которую я вызываю.
В 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 имеют общий базовый класс, и мне нужно работать с этим классом.
В 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 являются общими делегатами.