C #: FieldInfo.GetValue возвращает ноль - PullRequest
1 голос
/ 04 января 2011

У меня проблема с получением элемента управления f2 в переменной o с помощью Reflection:

public partial class Form1 : Form
{
    private Form2 f2;

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 f2 = new Form2();
        f2.Show();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        Type controlType = this.GetType();
        FieldInfo f = controlType.GetField("f2", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
        object o = f.GetValue(this); // o == null;
    }
}

Ответы [ 3 ]

9 голосов
/ 04 января 2011

Это потому, что вы создаете локальную переменную с именем f2 в button1_Click, но никогда не устанавливаете для члена класса f2 этот новый экземпляр:

private void button1_Click(object sender, EventArgs e)
{
    // Creates a new variable called f2 that is local to the function
    Form2 f2 = new Form2();

    // To store the local instance to the class member, you need to un-comment
    // this.f2 = f2;        
    // or change the previous line of code to:
    // f2 = new Form2();

    // Show the local form
    f2.Show();
}

Поэтому в классе есть нулевое значениеуровень f2.

Я также предполагаю, что в этом примере вы просто играете с отражением.Если это не совсем проверка отражения ... вам следует просто ссылаться на this.f2 напрямую, а не через отражение.

1 голос
/ 04 января 2011
FieldInfo myf = typeof(Form1).GetField("f2");
   Console.Writeline(myf.GetValue(this));

Должно работать на тебя!

0 голосов
/ 04 января 2011

Вы не устанавливаете значение частного поля f2. Вместо этого вы создаете локальную переменную с именем f2. Вместо этого кода:

Form f2 = new Form();

использование:

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