[英]Instantiating a class from different .dll using reflection based on the class name?
[英]Interesting behaviour when instantiating a class from a DLL
我目前正在研究一个反射项目,以自动生成API。 任务之一是生成样本响应,这是采用返回类型并仅通过对象生成器运行它的情况。 有趣的是,我遇到了一个奇怪的问题。
希望我能解释得足够好。
可以说我的生成器类称为“ ObjectGenerator”。 它以类型作为参数,并将尝试从该类型生成预填充的类。 这就是问题所在。
我有一个具有相当有效错误处理能力的外部DLL,但是,在奇怪的情况下,类构造存在例外。 但是问题是,无论我是否使用try / catch,都将永远不会抓住它。 例如:
try
{
object Gen = new ObjectGenerator(someExternalType);
} catch (Exception ex) {
// Some exception occurred when trying to create the object
}
在创建对象时发生异常时,try catch将被忽略,并且将引发未捕获的异常,从而导致系统崩溃。
这是相当有趣的行为,因为我似乎并没有想到可以捕获异常。
有人可以帮我解释一下吗? 这似乎不是我的代码的问题,而是更普遍的事情,因为这在我的代码中多次发生。
编辑:看起来这毕竟不只是一个外部DLL,对于使用ObjectGenerator的任何类来说更是如此……hmm-可能是错误的代码。
看起来系统在创建异常帧之前执行了对象c'tor。
至少这是我想到的唯一可能的解释。
查看您的代码:
try
{
ObjectGenerator Gen = new ObjectGenerator();
object obj = Gen.GenerateObject(typeof(Test));
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
而您正在呼叫的班级:
public class Test
{
public string t;
public Test()
{
t.Split(',');
}
}
它表明您调用了Test
的构造函数。 构造函数访问未初始化的变量t
。 因此,您将获得NullReferenceException
。
另外, 在 Visual Studio中进行调试时,尽管有异常处理程序,也会抛出一些异常!
按CTRL + ALT + E,以查看调试时仍然抛出什么异常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.