Для чего предназначен BindingFlags.InvokeMethod? - PullRequest
3 голосов
/ 12 августа 2010

У меня есть следующий код, используемый, чтобы избежать оператора switch, чтобы решить, какой метод вызывать, и он работает только с установленными мной флагами BindingFlags, без InvokeMethod.Для чего на самом деле предназначен InvokeMethod и почему он не нужен в следующем коде:

public enum PublishMethods
{
    Method1,
    Method2,
    Method3
}
private void Form1_Load(object sender, EventArgs e)
{
    InvokePublishMethod(PublishMethods.Method2);
}
private void InvokePublishMethod(PublishMethods publishMethod)
{
    var publishMethodsType = this.GetType();
    var method = publishMethodsType.GetMethod("Publish" + publishMethod, BindingFlags.NonPublic | BindingFlags.Instance);
    method.Invoke(this, null);
}
private void PublishMethod2()
{
    MessageBox.Show("Method2!");
}

Ответы [ 2 ]

4 голосов
/ 12 августа 2010

InvokeMethod не используется GetMethod, но используется, когда вы передаете BindingFlags в Type.InvokeMember.

BindingFlags - это странный тип enum, который объединяет три отдельных компонента (в соответствии с MSDN, «доступность», «аргумент привязки» и «операция»). Эти три части функциональности не имеют смысла, когда требуется параметр BindingFlags.

2 голосов
/ 12 августа 2010

Из MSDN InvokeMethod член:

Указывает, что метод должен быть вызван. Это не должен быть конструктор или инициализатор типа.

Используется методом InvokeMember.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...