需要使用反射从类方法返回值

时间:2019-12-10 10:14:39

标签: c# winforms reflection

在Winform中,用户可以根据单击的按钮选择颜色集。

颜色本身存储在不同的类中。使用反射时,调用的方法取决于所有按钮使用相同事件时单击的按钮。

代码形式:

private void Button_Theme__Click(object sender, EventArgs e)
{
    Button button = sender as Button;
    string[] Color = Regex.Split(button.Name.ToString(), "_");

    Type thisType = this.GetType();
    ColorTheme ColorTheme = new ColorTheme();
    MethodInfo ColorMethod = thisType.GetMethod("ColorTheme.Theme_" + Color[2]);

    Color[] ColorThemes =  (Color[])ColorMethod.Invoke(this, null);
    ColorThemeLight = ColorThemes[0];
    ColorThemeMedium = ColorThemes[1];
    ColorThemeDark = ColorThemes[2];     
} 

课程中的代码:

public Color[] Theme_Yellow()
{
    ColorThemeLight = Color.FromArgb(255, 255, 255, 200);
    ColorThemeMedium = Color.FromArgb(255, 191, 191, 150);
    ColorThemeDark = Color.FromArgb(255, 127, 127, 100);
    Color[] Colors = { ColorThemeLight, ColorThemeMedium, ColorThemeDark }; 
    return Colors;
} 

我收到以下错误,但是我似乎无法查明问题出在哪里以及如何解决。 enter image description here

1 个答案:

答案 0 :(得分:3)

要使用反射,您需要正确的Type和方法名称:

private void Button_Theme__Click(object sender, EventArgs e)
{
    Button button = sender as Button;
    string[] Color = string.Split(button.Name, "_");

    MethodInfo ColorMethod = typeof(ColorTheme).GetMethod("Theme_" + Color[2]);

    ColorTheme theme = new ColorTheme();
    Color[] ThemeColors = (Color[])ColorMethod.Invoke(theme, null);
    ColorThemeLight = ThemeColors [0];
    ColorThemeMedium = ThemeColors [1];
    ColorThemeDark = ThemeColors [2];     
}