У меня есть это как у одного из моих членов класса 'KeyEvent':
private delegate void eventmethod();
И конструктор:
public KeyEvent(eventmethod D)
{
D();
}
То, что я хочу сделать, вместо того, чтобы назвать D () там, я хочу сохранить тот метод (D) как членская переменная KeyEvent, таким образом, что-то как:
stored_method = D();
И затем позже в другом методе KeyEvent, сделайте что-то как:
stored_method();
Как я могу сделать это?
У вас уже есть код. Просто создайте членское поле нужного типа делегата и сохраните в нем параметр, как и в случае с любым другим типом данных.
private eventmethod MySavedEvent;
public void KeyEvent(eventmethod D) {
// Save the delegate
MySavedEvent = D;
}
public void CallSavedEvent() {
if (MySavedEvent != null) {
MySavedEvent();
}
}
public class KeyEvent
{
private eventmethod hurr;
public KeyEvent(eventmethod D)
{
hurr = D;
}
public void SomeOtherMethod()
{
hurr();
}
}
Пара вещей.... PascalCase types/delegates/etc (EventMethod) и camelCase arguments (d, dIMyMethod). И повторное использование того, что дает фреймворк: private Action hurr;
] вещь, которая вам нужна, называется "функция первого класса" [] http://en.wikipedia.org/wiki/First-class_function[][
] []C#, начиная с версии 3, поддерживает анонимные функции и лямбда-выражения. [
] []Таким образом, вы можете использовать []Func[
], которая представляет собой функцию, принимающую аргумент типа A и возвращающую значение типа R[
]из вики[
] [static Func<double, double> MakeDerivative(Func<double, double> f, double deltaX)
{
return (x) => (f(x + deltaX) - f(x - deltaX)) / (2 * deltaX);
}
] Можно сделать что-то вроде:
private Action CallBackFunction {get; set;}
public KeyEvent(Action callback) {
CallBackFunction = callback;
}
Что может быть конкретизировано следующим образом:
new KeyEvent(MyFunction);
Где MyFunction - это имя некоторой функции в этом классе
Класс KeyEvent может затем вызвать эту функцию с помощью:
CallBackFunction();
Класс Action также позволяет передавать сильно типизированные параметры, а класс Func может использоваться для методов, возвращающих результат.