现已有一个Object类型实例:myobj
有类:MyClass和MyClass2
想通过反射的方式对myobj进行灵活的拆箱操作
比如 (MyClass)myobj或者(MyClass1)myobj
应该怎么写?
public void GetIt(string str_ClassName)
{
Object myobj = new Object();
如何通过str_ClassName对myobj进行拆箱操作?
}
有类:MyClass和MyClass2
想通过反射的方式对myobj进行灵活的拆箱操作
比如 (MyClass)myobj或者(MyClass1)myobj
应该怎么写?
public void GetIt(string str_ClassName)
{
Object myobj = new Object();
如何通过str_ClassName对myobj进行拆箱操作?
}
这个用不着反射, 这样:
MyClass myClass = myobj as MyClass;>public void GetIt(string str_ClassName)
>{
> Object myobj = new Object();
> 如何通过str_ClassName对myobj进行拆箱操作?
>
>}
你说的很矛盾,刚才说是实例,这边又变成字符串了。这这儿,用不着拆箱操作,而应该用反射:public MyClass GetIt(string str_ClassName)
{
Assembly asm = Assembly.Load(....);
MyClass myClass = asm.CreateInstance("MyClass");
return myClass;
}
是我没说清楚我在应用程序中自己定义了两个异常类(属于命名空间WinException)
public class SqlErrorException :System.ApplicationException {……}
和public class NotConnectionException:System.ApplicationException {……}程序统一处理异常的时候
private static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
if (e.Exception.GetType().Namespace.Equals("WinException"))//如果是WinException命名空间
{
if (e.Exception.GetType().ToString() == "WinException.SqlErrorException")//这个可以获取是哪个异常类(SqlErrorException还是NotConnectionException)
{
MessageBox.Show(((WinException.SqlErrorException)e.Exception).Message.ToString());
}
else
{
MessageBox.Show(((WinException.NotConnectionException)e.Exception).Message.ToString());
}
}
}现在想用反射对这段代码进行改造,因为以后WinException还会加入更多的自定义异常类,总不能一个个去判断吧
我已经知道了类型的字符串形式
比如 string str_classname = "MyClass";
但是总不能 (str_classname)obj这样来操作吧?
我觉得反射应该可以解决这个问题,所以特来请教
{
MessageBox.Show(((IShowMsg)e.Exception).ShowMsg());
}
如果在SqlErrorException ,SqlErrorException中也重写了showMsg方法,MessageBox.Show(((IShowMsg)e.Exception).ShowMsg());
这样就不行了吧
MessageBox.Show((ApplicationException)GetIT("yourclassname")).Message.ToString());
{
/**//// <summary>
/// 抛出的错误信息
/// </summary>
string _mess;
public new string Message
{
get
{
return _mess;
}
}
public NotConnectionException(string mess)
{
_mess = mess;
}
public NotConnectionException(){}
}
Message属性本来就是virtual的。 public override string Message
{
get
{
return _mess;
}
} 况且你可以重写构造函数把Message传进去。