c# 反射带参数的构造函数和反射传参数问题

时间:2021-01-26 19:24:41

Assembly ass = Assembly.LoadFrom("UCClassL");
UserControls1 u = (UserControls1 )ass.CreateInstance("UCClassL.MyControls.UserControls1 ", true, BindingFlags.CreateInstance,null, new object[] { "fuck", "b" },null, null);
Panel1.Controls.Add(u);


UserControls1.cs:

public partial class UserControls1 : UserControl
{
    public UserControls1 ()
     {
            InitializeComponent();
     }

    public UserControls1 (object a, object b)
     {
          MessageBox.Show((string)a);
       }
       public void SayHello(string a)
      {
        MessageBox.Show(a+":Hello!")
     }
}


问题1:参数传进来了  可以显示messagebox 但是UserControl1 上的控件(一个button)没有显示出来
问题2:如果调用SayHello(string a)方法
问题3:如果UserControls1 继承的是我自己写的UCBase  用父类多态实现 是否有区别
ps:除了Assembly,还可以使用其他反射方法

3 个解决方案

#1


问题1:构造函数里没有   InitializeComponent(),当然不会加载控件
 public UserControls1 (object a, object b)
     {
           InitializeComponent();
          MessageBox.Show((string)a);
       }
问题2:什么叫“如果”?是“如何”吧?
既然你已经强制类型转换为UserControl1了,直接u.SayHello就行了……
问题3:你所说的“区别”是指什么?

#2


1. 你的构造函数重载了。调用的是有参数的这个构造函数,它没调这行“InitializeComponent()”初始化UI

#3


囧...

#1


问题1:构造函数里没有   InitializeComponent(),当然不会加载控件
 public UserControls1 (object a, object b)
     {
           InitializeComponent();
          MessageBox.Show((string)a);
       }
问题2:什么叫“如果”?是“如何”吧?
既然你已经强制类型转换为UserControl1了,直接u.SayHello就行了……
问题3:你所说的“区别”是指什么?

#2


1. 你的构造函数重载了。调用的是有参数的这个构造函数,它没调这行“InitializeComponent()”初始化UI

#3


囧...