繁体   English   中英

从DLL实例化类时的有趣行为

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM