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

來源:互聯網
上載者:User
建立|動態|對象|字串 在運行時任意指定對象的建立類型,甚至是用表示類型的名字的字串建立所需的對象,.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程式集。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.