如何做到c#动态实例化类?
2004-09-23 10:36
393 查看
我得到了一个字符串"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
//==========================================================
比如:
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
//==========================================================
相关文章推荐
- C#.Net 如何动态加载与卸载程序集(.dll或者.exe)1----C#中动态加载和卸载DLL
- C#中的WebBrowser控件,如何做到点击页面中的链接保持在应用程序内打开而不是用IE打开
- c#中如何调用vc++写的动态链接库
- C# 如何使用动态数组
- 如何用C#动态编译、执行代码
- C#.NET常见问题(FAQ)-如何让TabControl可以动态增加或删除
- [C# 开发技巧系列]如何动态设置屏幕分辨率
- 如何动态加载控件以及插件编程思想(C#)
- C#.NET常见问题(FAQ)-如何让TabControl可以动态增加或删除
- 如何用C#动态生成代码
- C#反射调用窗体,C#动态调用窗体,动态实例化窗体的方法
- 如何用C#动态编译、执行代码
- 如何:声明、实例化和使用委托(C# 编程指南)
- 如何使用C#与XML创建动态分层菜单
- 在C#中如何动态创建access数据库并对SQLserver中的数据导入进去
- [C# 开发技巧系列]如何动态设置屏幕分辨率
- C#.Net 如何动态加载与卸载程序集(.dll或者.exe)2----通过应用程序域AppDomain加载和卸载程序集之后,如何再返回原来的主程序域
- 如何用C#动态编译、执行代码
- 如何用C#动态编译、执行代码
- 详解C#如何动态调用WebService