Wskaźniki funkcji w C #

Przypuszczam, że w pewnym sensie (lub w obu)Delegate lubMethodInfo zakwalifikować się do tego tytułu. Jednak żadna z nich nie zapewnia takiej syntaktyczności, jakiej szukam. Krótko mówiąc: Czy jest jakiś sposób, w jaki mogę napisać:

FunctionPointer foo = // whatever, create the function pointer using mechanisms
foo();

Nie mogę użyć solidnego delegata (np. Używającdelegate słowo kluczowe do zadeklarowania typu delegata), ponieważ nie ma możliwości sprawdzenia do czasu wykonania dokładnej listy parametrów. Dla porównania, oto, co aktualnie bawiłem się w LINQPad, gdzieB będzie (głównie) kodem wygenerowanym przez użytkownika i tak będzieMain, a więc dla bezpieczeństwa moich użytkowników, próbuję usunąć.Call:

void Main()
{
    A foo = new B();
    foo["SomeFuntion"].Call();
}

// Define other methods and classes here
interface IFunction {
    void Call();
    void Call(params object[] parameters);
}

class A {
    private class Function : IFunction {
        private MethodInfo _mi;
        private A _this;
        public Function(A @this, MethodInfo mi) {
            _mi = mi;
            _this = @this;
        }

        public void Call() { Call(null); }
        public void Call(params object[] parameters) {
            _mi.Invoke(_this, parameters);
        }
    }

    Dictionary<string, MethodInfo> functions = new Dictionary<string, MethodInfo>();

    public A() {
        List<MethodInfo> ml = new List<MethodInfo>(this.GetType().GetMethods());
        foreach (MethodInfo mi in typeof(Object).GetMethods())
        {
            for (int i = 0; i < ml.Count; i++)
            {
                if (ml[i].Name == mi.Name)
                    ml.RemoveAt(i);
            }
        }

        foreach (MethodInfo mi in ml)
        {
            functions[mi.Name] = mi;
        }
    }

    public IFunction this[string function] {
        get { 
            if (!functions.ContainsKey(function))
                throw new ArgumentException();

            return new Function(this, functions[function]);
        }
    }
}

sealed class B : A {
    public void SomeFuntion() {
        Console.WriteLine("SomeFunction called.");
    }
}

questionAnswers(2)

yourAnswerToTheQuestion