Как сохранить указатель функции в C#

Скажем, я хочу сохранить группу указателей функции в a List<(*func)>, и затем позже назовите их, возможно, даже с параметрами... Как то, если я сохранил в a Dict<(*func), object[] params> я мог назвать func с параметрами? Как я сделал бы это?

19
задан Sam Harwell 31 March 2010 в 03:40
поделиться

5 ответов

.NET использует делегаты вместо указателей функций. Вы можете хранить экземпляр делегата, как и любой другой объект, в словаре или иным образом.

См. Делегаты из руководства по программированию на C# на MSDN.

34
ответ дан 30 November 2019 в 02:05
поделиться

Есть несколько способов сделать это. Вы могли бы сделать это, как предлагали другие, с помощью делегатов. Но для того, чтобы словарь заработал, им всем понадобится одна и та же подпись.

var funcs = new Dictionary<Action<object[]>, object[]>();

Или, если у них разные сигнатуры, вы можете использовать реальный отраженный метод, как показано ниже

var funcs = new Dictionary<MethodInfo, object[]>();
2
ответ дан 30 November 2019 в 02:05
поделиться

У вас может быть словарь функций:

Dictionary<string, Action<T>> actionList = new Dictionary<string, Action<T>>();
Dictionary<string, Func<string>> functionList = new Dictionary<string, Func<string>>();

actionList.Add("firstFunction", ()=>{/*do something;*/});
functionList.Add("firstFunction", ()=>{return "it's a string!";});

Затем вы можете вызвать методы вроде этого:

string s = functionList["firstFunction"].Invoke();
22
ответ дан 30 November 2019 в 02:05
поделиться

Используйте эфир как делегат или событие (в зависимости от использования).

2
ответ дан 30 November 2019 в 02:05
поделиться

Посмотрите документацию C# по делегатам, которые являются эквивалентом указателя функции в C# (он может быть обычным указателем функции или быть один раз прокликанным, чтобы предоставить параметр this). Там есть много информации, которая будет вам полезна.

8
ответ дан 30 November 2019 в 02:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: