C#中,覆盖对象中的基类可以为null吗?

3
希望有人能帮忙解决这个问题,它让我很疯狂。
我有一个继承自父对象并覆盖了该对象某些方法的类。其中一个重写的相关代码如下所示(我已经剥离了正常运行的代码):
    public override void Initialise()
    {
        if (Url != null)
        {
            _logger.LogInfo("Initialising for file " + Url);

            // call the base Initialise method
            try
            {
                base.Initialise();
            }
            catch (Exception ex)
            {
                _logger.LogError("Error on initialise : ", ex);
            }
      }
 }

记录器对象将写入我们的应用程序日志数据库。
当它第一次到达代码的这一点时,它会记录初始化错误,并返回一个未设置为对象实例的对象引用错误。但没有更多信息、内部异常和行号。
我想知道基类是否可能为空?这似乎很奇怪和不太可能,但我无法解释为什么没有更多信息,以及为什么代码一直抵制我获取更多信息的所有尝试。
因为它在生产服务器上,所以我不能逐步执行它,在测试服务器上也无法复制该错误。如果有人有任何关于如何获得更多详细信息以及出错的位置和方式的想法,那就非常感谢了。
谢谢, Matt

1
你尝试设置断点了吗? - Lews Therin
1
base.Initialise() 是做什么的?尝试在调试器中逐步执行代码,我认为错误就在那里。 - Hans Kesting
可能会在基类中定义了一个未实例化且未被使用的成员。 - Boomer
1
基础不会为空,但是 base.Initialize 方法内部使用的某些东西却为空。 - Bob Vale
你能至少记录一下堆栈跟踪吗? - Paolo Falabella
1个回答

5

你的问题的答案是否定的。Base 不能为 null,因为它在子类之前被实例化(如果你没有调用特定的 base 类型构造函数,则默认构造函数会在子类构造函数执行之前被调用)。你的错误来自于 base.Initialize() 方法。


这是我假设的,但想要确认一下。我不能从基本对象中获取更多详细信息吗?它没有访问记录器的权限... - Bob Tway
@MattThrower,你有base.Initialize()方法的代码访问权限吗? - Sergey Berezovskiy
我已经做了。而且我已经找出了问题所在。但是我仍然需要一些反馈来弄清楚为什么。 - Bob Tway
@MattThrower 顺便说一下,你没有在异常对象中收到堆栈跟踪信息很奇怪 - 也许异常被重新抛出了? - Sergey Berezovskiy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接