VB.net 的反射疑惑


  昨日同事用 VB.net 2002 写了一段反射的代码,结果怎么都无法在运行时获得成员变量!我看过,觉得代码应该没问题,便用 C#(VS.net 2003) 重写,结果成功。附C#代码如下:

public class Form1 : System.Windows.Forms.Form
{
    private System.Windows.Forms.Button button1;

    public Form1()
    {
       
// Windows 窗体设计器支持所必需的
        InitializeComponent();
    }

    private void InitializeComponent()
    {
        this.button1 = new System.Windows.Forms.Button();

        // set properties value...
    }

    private void Form1_Click(object sender, System.EventArgs e)
    {
        System.Reflection.FieldInfo field = this.GetType().GetField("button1", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);

        System.Windows.Forms.Control ctl = (Control)field.GetValue(this);
        MessageBox.Show(ctl.Text + System.Environment.NewLine + ctl.Name);
    }
}

  那么为什么在C#中可以,而在VB.net中却始终无法获得 "button1" 的 System.Reflection.FieldInfo 对象呢?

  使用 this.GetType().GetFields()【VB.net 中为 Me.GetType().GetFields()】枚举所有成员字段,结果发现原本为 "button1" 的控件名变成了 "_button1" 了!!!怎么会多出一个前缀的下划线???!!!是不是VB.net编译器搞的鬼?!唉,把 Form1_Click 事件处理函数中的第一行代码中的 "button1" 改为 "_button1" 后,成功!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值