C#中反射用法---根据一个字符串,例如“TextBox
2013-04-25 09:36
337 查看
C#中反射用法---根据一个字符串,例如“TextBox
public static void CreateControl(string controlTypeFullName, Form form, int positionX, int positionY)
{
try
{
string assemblyQualifiedName = typeof(System.Windows.Forms.Form).AssemblyQualifiedName;
string assemblyInformation = assemblyQualifiedName.Substring(assemblyQualifiedName.IndexOf(","));
Type ty = Type.GetType(controlType + assemblyInformation);
Control newControl = (Control)System.Activator.CreateInstance(ty);
form.SuspendLayout();
newControl.Location = new System.Drawing.Point(positionX, positionY);
newControl.Name = ty.Name + form.Controls.Count.ToString();
form.Controls.Add(newControl);
form.ResumeLayout();
}
catch(Exception ex)
{
throw ex;
}
}
Type.GetType("System.Windows.Forms.CheckBox")行不行?呵呵,不行。Type.GetType()方法从字符串获得类型仅限于corlib中的类型或者工程内部的类型,如果是来自于外部的程序集就需要加以程序集的名称。Windows.Forms程序集是公有的程序集,是位于程序集缓存中的,可以在.net Framwork内部实现side by side执行。所以这个程序集有不同的版本,为了确定使用的版本,我们不仅要提供程序集的名称,还要提供程序集的版本和强名称。按照这个思路,.net
Framework 1.1上,将这一句写成Type.GetType("System.Windows.Forms.CheckBox, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")。现在运行就没有问题了。问题是我们如何取得所用Windows.Forms程序集的版本和强名称?可以用GetType(CheckBox).AssemblyQualifiedName这样的语法,一旦得到了这些信息,我们就可以将这些信息用于其它任何控件,因为他们都来自于同一个版本Windows.Forms程序集。
public static void CreateControl(string controlTypeFullName, Form form, int positionX, int positionY)
{
try
{
string assemblyQualifiedName = typeof(System.Windows.Forms.Form).AssemblyQualifiedName;
string assemblyInformation = assemblyQualifiedName.Substring(assemblyQualifiedName.IndexOf(","));
Type ty = Type.GetType(controlType + assemblyInformation);
Control newControl = (Control)System.Activator.CreateInstance(ty);
form.SuspendLayout();
newControl.Location = new System.Drawing.Point(positionX, positionY);
newControl.Name = ty.Name + form.Controls.Count.ToString();
form.Controls.Add(newControl);
form.ResumeLayout();
}
catch(Exception ex)
{
throw ex;
}
}
Type.GetType("System.Windows.Forms.CheckBox")行不行?呵呵,不行。Type.GetType()方法从字符串获得类型仅限于corlib中的类型或者工程内部的类型,如果是来自于外部的程序集就需要加以程序集的名称。Windows.Forms程序集是公有的程序集,是位于程序集缓存中的,可以在.net Framwork内部实现side by side执行。所以这个程序集有不同的版本,为了确定使用的版本,我们不仅要提供程序集的名称,还要提供程序集的版本和强名称。按照这个思路,.net
Framework 1.1上,将这一句写成Type.GetType("System.Windows.Forms.CheckBox, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")。现在运行就没有问题了。问题是我们如何取得所用Windows.Forms程序集的版本和强名称?可以用GetType(CheckBox).AssemblyQualifiedName这样的语法,一旦得到了这些信息,我们就可以将这些信息用于其它任何控件,因为他们都来自于同一个版本Windows.Forms程序集。
TopNamespace.SubNameSpace.ContainingClass+NestedClass, MyAssembly, Version=1.3.0.0, Culture=neutral, PublicKeyToken=b17a5c561934e089
相关文章推荐
- c#中反射的用法(即如何根据字符找到已定义的变量)
- C# 2005如何根据类型声明的字符串反射创建泛型(Generic)对象
- 1.编写一个程序,这个程序把一个整数数组中的每个元素用逗号连接成一个字符串,例如,根据内容为[1][2][3]的数组形成内容
- 第七题:牛牛拿到了一个藏宝图,顺着藏宝图的指示,牛牛发现了一个藏宝盒,藏宝盒上有一个机关,机关每次会显示两个字符串 s 和 t,根据古老的传说,牛牛需要每次都回答 t 是否是 s 的子序列。注意,子序列不要求在原字符串中是连续的,例如串 abc,它的子序列就有 {空串, a, b, c, ab, ac, bc, abc} 8 种。
- c#中反射的用法(即如何根据字符找到已定义的变量)
- C#中Split用法(把字符串以某个字符为分隔符分成一个数组)【转】
- C#中Split用法(把字符串以某个字符为分隔符分成一个数组)
- C# 一个字符串是否在另外一个字符串数组里 Array.Exists 的用法 Array.IndexOf 用法
- C# 一个字符串是否在另外一个字符串数组里 Array.Exists 的用法 Array.IndexOf 用法
- c#中反射的用法(即如何根据字符找到已定义的变量)
- C# 一个字符串是否在另外一个字符串数组里 Array.Exists 的用法 Array.IndexOf 用法
- C# 一个字符串是否在另外一个字符串数组里 Array.Exists 的用法 Array.IndexOf 用法
- C# 一个字符串是否在另外一个字符串数组里 Array.Exists 的用法 Array.IndexOf 用法
- 一个扩展后的Split方法,可根据字符串分隔字符,返回字符数组
- C#中一些字符串操作的常用用法
- C#反射创建对象(根据程序集)
- 根据分隔符将一个长字符串分割保存到动态数组中
- [转]C#反射,根据反射将数据库查询数据和实体类绑定,并未实体类赋值
- C#字符串的简单用法
- c#你怎么判断一个字符串是否是数字?