反射的使用

1.将主程序界面上的Icon赋给基类内的Icon(同时其他子类也具有了此Icon):

    public partial class BaseForm : Form
    {
        public BaseForm()
        {
            InitializeComponent();

            String exeFileName = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\A.B.Main.exe";
            if (System.IO.File.Exists(exeFileName))
            {
                System.Reflection.Assembly assembly = System.Reflection.Assembly.LoadFrom(exeFileName);
                if (assembly != null)
                {
                    System.IO.Stream stream = assembly.GetManifestResourceStream("A.B.Main.C.ico");
                    if (stream != null)
                    {
                        this.Icon = new Icon(stream);
                    }
                }
            }
        }
    }

  

 2、获取接口:

 Assembly assembly = Assembly.LoadFrom(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\A.B.UI.dll");
            this.iUIC = assembly.CreateInstance("A.B.UI.UIC", false, BindingFlags.Default, null, null, null, null) as IUIC;

3、获取xml文件

 Assembly assembly = Assembly.LoadFrom(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\A.B.UI.dll");
            Stream stream = assembly.GetManifestResourceStream(assembly.GetName().Name + ".Config.xml");
            System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
            xmlDoc.Load(stream);
            stream.Close();
            stream.Dispose();

4、创建窗体:

 public static Form CreateForm(String formAssemblyFile, String formFullName, Object[] formArgs, String formName, String formText)
        {
            Form form;
            Assembly formAssembly = Assembly.LoadFrom(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\" + formAssemblyFile);

            if (formArgs == null)
            {
                form = formAssembly.CreateInstance(formFullName, false, BindingFlags.Default, null, null, null, null) as Form;
            }
            else
            {
                form = formAssembly.CreateInstance(formFullName, false, BindingFlags.Default, null, formArgs, null, null) as Form;
            }

			if (form == null)
			{
				string strError = string.Format("CreateForm失败\nformAssemblyFile={0}\nformFullName={1}\nformName={2}\nformText={3}",
					formAssemblyFile,
					formFullName,
					formName,
					formText);
				throw new Exception(strError);
			}

            if (!String.IsNullOrEmpty(formName))
            {
                form.Name = formName;
            }
            if (!String.IsNullOrEmpty(formText))
            {
                form.Text = formText;
            }

            return form;
        }

 4、获取版本信息:

(1)Assembly.GetExecutingAssembly().GetName().Version.ToString();

(2)object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false);
                if (attributes.Length == 0)
                {
                    return "";
                }
                return ((AssemblyDescriptionAttribute)attributes[0]).Description;

(3)object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false);
                if (attributes.Length == 0)
                {
                    return "";
                }
                return ((AssemblyProductAttribute)attributes[0]).Product;

 

 

   反射对控件的操作:调用函数(含参数|不含参数)

 

     #region 调用控件方法
        private void InvokeMethod(String methodName, Control control, Object[] args)
        {
            this.SetPropertyValue("UserTempFilePath", control, this.userTempPathFullName);

            try
            {
                Type ctlType = control.GetType();
                MethodInfo mi = null;
                if (args == null)
                {
                    mi = ctlType.GetMethod(methodName, System.Type.EmptyTypes);
                }
                else
                {
                    mi = ctlType.GetMethod(methodName);
                }

                if (mi != null)
                {
                    mi.Invoke(control, args);

                    this.SetPropertyValue("IsReadOnly", control, true);
                }
            }
            catch (Exception e)
            {
                throw e;
            }
        }
        #endregion

        #region 设置控件属性
        private void SetPropertyValue(String propertyName, Control control, Object propertyValue)
        {
            Type ctlType = control.GetType();
            PropertyInfo pi = ctlType.GetProperty(propertyName);
            if (pi != null)
            {
                pi.SetValue(control, propertyValue, null);
            }
        }
        #endregion

 

posted @ 2014-08-07 15:00  慧由心生  阅读(337)  评论(0编辑  收藏  举报