程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 實現運行時從字符串動態創建對象

實現運行時從字符串動態創建對象

編輯:.NET實例教程
在運行時任意指定對象的創建類型,甚至是用表示類型的名字的字符串創建所需的對象,.Net Framwork的反射機制給我們帶來了解決問題的方法。這裡,若只需要創建一般的對象,我們可以通過System.Activator來實現,而較復雜的我們可以通過獲取構造方法來實現。

反射Reflection是.net中重要機制,通過反射,可以在運行時獲得.Net中每一個類型(包括類、結構、委派、接口、枚舉)的成員,包括方法、屬性、事件以及構造函數等,還可以獲得每個成員的名稱、限定符和參數等,有了反射,就可以對每一個類型了如指掌。如果獲得了構造函數的信息,就可以直接創建對象,即使這個對象的類型在編譯的時候還不知道。

/// <summary>
/// CreateNewControls 根據空間的名稱,類型字符串,大小、位置去動態的生成一個控件
/// </summary>
/// <param name="targetControl"> 控件加載到的容器</param>
/// <param name="ctlName">生成的控件實例名稱</param>
/// <param name="ctlType">生成的控件類型字符串如(TextBox、Button等)</param>
/// <param name="ctlSize">控件的大小</param>
/// <param name="ctlLocation">控件的位置</param>
/// <returns>生成的控件實例</returns>
private Control CreateNewControls(Control.ControlCollection targetControl,string ctlName,Type ctlType, System.Drawing.Size ctlSize,System.Drawing.Point ctlLocation)
{
Control toCreate;
toCreate = (Control)System.Activator.CreateInstance(ctlType);
toCreate.Name = ctlName;
toCreate.Size = ctlSize;
toCreate.Location = ctlLocation;
targetControl.Add(toCreate);

return toCreate;
}




Size cbSize = new Size(160,40);

Point cbPoint = new Point(64,206);

Control c1 = CreateNewControls(this.Controls,"control1",Type.GetType("System.Windows.Forms.CheckBox, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"),cbSize,cbPoint);

c1.Text =" Check Box";



.ne tFramework 1.1上,Type.GetType("System.Windows.Forms.CheckBox, System.Windows.Forms,Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089")。

我們如何取得所用Windows.Form程序集的版本和強名稱?可以用GetType(CheckBox).AssemblyQualifIEdName這樣的語法,一旦得到了這些信息,我們就可以將這些信息用於其它任何控件,因為他們都來自於同一個版本Windows.Forms程序集。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved