如何根据 GetType 返回的类型生成一个变量?

changechange 2007-12-09 03:53:57
如何根据 GetType 返回的类型生成一个变量?

比如我有一个函数

public void MyFunciton(object a)
{
Type t = a.GetType();
//这里要按 Type 的类型生成一个新的变量,将 a 转换为该类型的变量,该如何写代码?,比如
// 我传进来的是 TextBox , MyFunction(Textbox1) 那么程序要能自动将 a 转换为 TextBox ,如果是
  // MyFunction(Lable1) ,程序要能自动将 a 转换为 Label ,这个程序怎么写?

....
}







...全文
229 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
0xff 2007-12-10
  • 打赏
  • 举报
回复
只能通过反射来完成。。。


/// <summary>
/// 获取实例的属性值
/// </summary>
/// <param name="ClassInstance">类实例</param>
/// <param name="PropertyName">属性名</param>
/// <returns>属性值</returns>
private object GetPropertyValue(object ClassInstance, string PropertyName)
{
Type myType = ClassInstance.GetType();
PropertyInfo myPropertyInfo = myType.GetProperty(PropertyName, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
return myPropertyInfo.GetValue(ClassInstance, null);
}

/// <summary>
/// 设置实例的属性值
/// </summary>
/// <param name="ClassInstance">类实例</param>
/// <param name="PropertyName">属性名</param>
private void SetPropertyValue(object ClassInstance, string PropertyName, object PropertyValue)
{
Type myType = ClassInstance.GetType();
PropertyInfo myPropertyInfo = myType.GetProperty(PropertyName, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
myPropertyInfo.SetValue(ClassInstance, PropertyValue, null);
}

/// <summary>
/// 执行实例的方法
/// </summary>
/// <param name="ClassInstance">类实例</param>
/// <param name="MethodName">方法名</param>
/// <param name="parameters">参数列表</param>
/// <returns>返回值</returns>
private object MethodInvoke(object ClassInstance, string MethodName, object[] parameters)
{
if (parameters == null)
{
parameters = new object[0];
}
Type myType = ClassInstance.GetType();
Type[] types = new Type[parameters.Length];
for (int i = 0; i < parameters.Length; ++i)
{
types[i] = parameters[i].GetType();
}
MethodInfo myMethodInfo = myType.GetMethod(MethodName, types);
return myMethodInfo.Invoke(ClassInstance, parameters);
}

changechange 2007-12-10
  • 打赏
  • 举报
回复
up
laoshi10 2007-12-10
  • 打赏
  • 举报
回复
object value = textbox;
沒在IDE上寫,粗心了
laoshi10 2007-12-10
  • 打赏
  • 举报
回复
value.Text = ""; //如果传入 TEXTBOX ,出错,object 没有 text 属性,我要实现类似功能

//這里用TextBox做實驗,當然只要有Text屬性的并且有get存取子就可以使用
TextBox textbox = new TextBox();
object value = text;
string text = value.GetType().GetProperty("Text").GetValue(value, null);
changechange 2007-12-10
  • 打赏
  • 举报
回复
非常感谢,楼上这位0xff的应该就是我要的
changechange 2007-12-09
  • 打赏
  • 举报
回复
大家看见3楼么?

甚至包括我自己的自定义类

看见了么?

可以传入任何类


我现在的需求就是传入任何类,这些传入的类没有继承关系,只是有一个共同的属性 TEXT,这个函数无论传入什么类,都返回这个类的 TEXT 属性。TEXT 属性是 STRING
shinaterry 2007-12-09
  • 打赏
  • 举报
回复
如果传入的是 TextBox 的实例,可以直接用 TextBox box = (TextBox)value;

在Winforms中Control是所有UI控件的基类...

再用box做操作...

^o^
shinaterry 2007-12-09
  • 打赏
  • 举报
回复

public void MyFunciton(object a)
{
object value = Activator.CreateInstance(a.GetType());

((Control)value).Text = "";
}


狂晕, 难道LZ连强制转换都不会吗???
changechange 2007-12-09
  • 打赏
  • 举报
回复

public void MyFunciton(object a)
{
Type t = a.GetType();
object value = Activator.CreateInstance(a.GetType());
value.Text = ""; //如果传入 TEXTBOX ,出错,object 没有 text 属性,我要实现类似功能
}

你这样再声明一个 OBJECT 还不如直接就用等于号呢
shinaterry 2007-12-09
  • 打赏
  • 举报
回复

public void MyFunciton(object a)
{
object value = Activator.CreateInstance(a.GetType());
}
changechange 2007-12-09
  • 打赏
  • 举报
回复
甚至包括我自己的自定义类
changechange 2007-12-09
  • 打赏
  • 举报
回复
用 SWITCH 来转换变量,必须事先知道这个变量可能是什么类型的,然后把所有的转换语法先写出来,问题是我现在不知道 object a 可能是什么类型,我会把任何类型的都放进 object a 中的。
apollolb2005 2007-12-09
  • 打赏
  • 举报
回复
意思不是特别明白...
看看这个对你是否有帮助....
switch(t)
{
case typeof(TextBox):
TextBox txtObj = (TextBox)a;
.....
}

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧