leves

使一切更加简单!

导航

如何做到c#动态实例化类?

 

我得到了一个字符串"clsMyPart",有一个类也叫clsMyPart,如何把字符串转为类啊
比如:
string strClass = "clsMyPart";
strClass myClass = new strClass();
这样写肯定是错的,我该怎么写啊?


//==========================================================
 
 回复人: ruixing123(想入非非) ( ) 信誉:100  2004-09-21 09:29:00  得分: 0 
 
 
   字符串是数据类型,类是面向对象语言中一个抽象的概念?
 
 
//==========================================================
 
 回复人: thinkingforever(努力学习) ( ) 信誉:105  2004-09-21 09:37:00  得分: 0 
 
 
   http://community.csdn.net/Expert/topic/3361/3361663.xml?temp=.267605
 
 
//==========================================================
 
 回复人: soulroom(易水之风) ( ) 信誉:90  2004-09-21 09:39:00  得分: 0 
 
 
   Activator.CreateInstance(assemblyName, typeName);
 
 
//==========================================================
 
 回复人: OriesMap() ( ) 信誉:100  2004-09-21 09:46:00  得分: 0 
 
 
   估计得用反射什么,比如getType()之类的。查一下吧。
 
 
//==========================================================
 
 回复人: henryfan1(每天好心情(*_*)) ( ) 信誉:72  2004-09-21 09:53:00  得分: 0 
 
 
   Assembly SampleAssembly;     
SampleAssembly = Assembly.Load("程序集名称");
程序集必须被引,如果不想引用可以LoadFile

string strClass = "clsMyPart";
object myClass = SampleAssembly.CreateInstance(strClass );
具体用的时候可以将myClass拆箱


 
 
//==========================================================
 
 回复人: revel(成梦) ( ) 信誉:100  2004-09-21 09:56:00  得分: 0 
 
 
   你要在类中建一个变量,再把字符串的值赋给变量就行
 
 
//==========================================================
 
 回复人: chsfly(南山) ( ) 信誉:100  2004-09-21 10:07:00  得分: 0 
 
 
   你意思是不是:提供一个类的名称,然后根据这个类名将这个类进行实例化.是这个意思吗?
 
 
//==========================================================
 
 回复人: chsfly(南山) ( ) 信誉:100  2004-09-21 10:15:00  得分: 0 
 
 
   如果是这样的意思可以通过ConstructorInfo来实现,具体参见msdn.
 
 
//==========================================================
 
 回复人: butterflya(我心飞翔) ( ) 信誉:100  2004-09-21 10:29:00  得分: 0 
 
 
   南山 就是你所说的意思!
 
 
//==========================================================
 
 回复人: bflovesnow() ( ) 信誉:100  2004-09-21 11:13:00  得分: 0 
 
 
   反射
 
 
//==========================================================
 
 回复人: butterflya(我心飞翔) ( ) 信誉:100  2004-09-21 11:21:00  得分: 0 
 
 
   哥哥们 讲具体的啊 我搞不懂 !!
我的类文件叫clsMyPart.cs  类叫clsMyPart,clsMyPart有公共方法 myFunction(),具体该怎么做啊???
 
 
//==========================================================
 
 回复人: xupc(寻巢鸟) ( ) 信誉:100  2004-09-21 12:14:00  得分: 0 
 
 
   Type a=Type.GetType("clsMyPart");
 
 
//==========================================================
 
 回复人: butterflya(我心飞翔) ( ) 信誉:100  2004-09-21 12:46:00  得分: 0 
 
 
   楼上的 :未将对象引用设置到对象的实例。
 
 
//==========================================================
 
 回复人: yellowhwb(KaDoO) ( ) 信誉:99  2004-09-21 13:19:00  得分: 0 
 
 
   Type t = Type.GetType("XXX.clsMyPart",Version=1.0.3300.0, Culture=neutral, PublicKeyToken=XXXXXXXXXXXXXXXX");//类的全名+版本号+PublicKeyToken,如Type t = Type.GetType("System.Data.DataTable,System.Data,Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");

clsMyPart table = (clsMyPart)Activator.CreateInstance(t);
 
 
//==========================================================
 
 回复人: butterflya(我心飞翔) ( ) 信誉:100  2004-09-21 13:41:00  得分: 0 
 
 
  
strClass会得到"webpartFiles","webparDoc"等字符串,这些字符串正好是我的类
//-----------------------------------
for (int i = 0; i <= positionDS.Tables["tb_layout"].Rows.Count-1; i++)
    {
int Iscomponent   = Int32.Parse(positionDS.Tables["tb_layout"].Rows[i]["intIscomponent"].ToString());
string strClass  = positionDS.Tables["tb_layout"].Rows[i]["strCtrlSource"].ToString();

if (Iscomponent == 0)
     {
//这里是需要将字符串实例化成类的地方,上面的方法都没有成功
    
     }
}

-------------------------------------------------------------------------

 

//下面是我的类文件  webpartFiles.cs   
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;


namespace contentManage
{
 /// <summary>
 /// webpartQuery改编至webpartDoc
 /// </summary>
 [DefaultProperty("Text"),
 ToolboxData("<{0}:webpart runat=server></{0}:webpart>")]
 public class webpartFiles: WebControl
 {
 
  public webpartFiles(string strlay)
  {
   webpart myWebpart     = new webpart();
   myWebpart.leftTitleCss        = "fileTitleL";
   myWebpart.rightTitlweCss      = "fileTitleR";
   myWebpart.centerTitleCss      = "fileTitle";
   myWebpart.listBgCss           = "filebg";
   myWebpart.pointImg            = "<img src=\"images/ico_down.gif\" alt=\"download\" />";

   myWebpart.titleLink           = "model_filesList.aspx?classid=";
   myWebpart.addLink             = "adminEditFiles.aspx?perclassid=";
   myWebpart.editLink            = "adminEditfiles.aspx?itemid=";
   myWebpart.viewLink            = "viewDocument.aspx?itemid=";

   myWebpart.TBidName            = "ItemID";
   myWebpart.TBTitleName         = "FileFriendlyName";
   myWebpart.TBWriterName        = "CreatedByUser";
   myWebpart.TBCreateTimeName    = "CreatedDate";

   myWebpart.querySqlTable//--------------------------------------------------------------------------------------------50  = " SELECT //==========================================================50 ItemID,ModuleID,FileFriendlyName,FileNameUrl,CreatedByUser,CreatedDate,Category,ContentSize,intCheck FROM tb_Documents ";
   myWebpart.querySqlTable//--------------------------------------------------------------------------------------------5   = " SELECT //==========================================================5 ItemID,ModuleID,FileFriendlyName,FileNameUrl,CreatedByUser,CreatedDate,Category,ContentSize,intCheck FROM tb_Documents ";
   myWebpart.querySqlView        = " where ModuleID='"+strlay+"' and  intcheck=0  order by itemid desc ";
   myWebpart.querySqlEdit        = " where ModuleID='"+strlay+"' and (intcheck=0 or CreatedByUser ='"+HttpContext.Current.User.Identity.Name.ToString()+"') order by itemid desc";
   myWebpart.querySqlCheck       = " where ModuleID='"+strlay+"' order by itemid desc";

   myWebpart.webparTitleBuild(strlay);

   this.Controls.Add(myWebpart);
 
  }

 
 
 }

}

 


 
 
//==========================================================
 
 回复人: xupc(寻巢鸟) ( ) 信誉:100  2004-09-21 14:01:00  得分: 0 
 
 
   只是给你一条思考的线路,具体方法自已举一反三,好好查下MSDN

Assembly asm=Assembly.LoadFile("your dll file");
Type a=asm.GetType("type name")
 
 
//==========================================================
 
 回复人: adailee(为了一棵树,我放弃了整个森林) ( ) 信誉:100  2004-09-21 14:03:00  得分: 0 
 
 
   3,2,1,反射!
 
 
//==========================================================
 
 回复人: butterflya(我心飞翔) ( ) 信誉:100  2004-09-21 14:47:00  得分: 0 
 
 
   没想到这个问题这么复杂。。。。。。。。。。。
 
 
//==========================================================
 
 回复人: butterflya(我心飞翔) ( ) 信誉:100  2004-09-22 09:26:00  得分: 0 
 
 
   还是没有解决 upupup
 
 
//========================================================== 
 

posted on 2004-09-23 10:36  leves  阅读(4789)  评论(0编辑  收藏  举报