c#在重写对象中,base可以为null吗?
希望有人能帮上忙,我快疯了 我有一个从父对象继承的类,它重写了该对象的一些方法。其中一个覆盖中的相关代码如下所示(我已剥离了正确运行的代码): logger对象写入我们的应用程序日志数据库 当它第一次在代码中达到这一点时,它会在initalise上记录错误,并给我一个未设置为object error实例的对象引用。但没有进一步的信息,没有内部异常,也没有行号 我想知道是否有任何方法,基地可能是空的?这似乎很奇怪,也不太可能,但我无法解释为什么没有进一步的信息,为什么代码拒绝了我从中获取更多信息的所有尝试 它位于实时服务器上,因此我无法单步执行,也无法在测试服务器上复制错误。如果有人对我如何获得更多关于哪里出错以及如何出错的细节有任何想法,我将不胜感激 干杯,c#在重写对象中,base可以为null吗?,c#,logging,null,C#,Logging,Null,希望有人能帮上忙,我快疯了 我有一个从父对象继承的类,它重写了该对象的一些方法。其中一个覆盖中的相关代码如下所示(我已剥离了正确运行的代码): logger对象写入我们的应用程序日志数据库 当它第一次在代码中达到这一点时,它会在initalise上记录错误,并给我一个未设置为object error实例的对象引用。但没有进一步的信息,没有内部异常,也没有行号 我想知道是否有任何方法,基地可能是空的?这似乎很奇怪,也不太可能,但我无法解释为什么没有进一步的信息,为什么代码拒绝了我从中获取更多信息的
Matt您的问题的答案是否。Base不能为null,因为它在子类之前实例化(如果您不调用特定的基类型构造函数,则在执行子类构造函数之前调用默认的基类型构造函数)。您的错误来自
base.Initialize()
方法 您是否尝试设置断点?base.Initialise()的作用是什么?尝试在调试器中单步执行代码,我认为错误就在那里。可能在基类中定义了一个未实例化和正在使用的成员。base不会为null,但在base中会有一些内容。Initialize方法正在使用它预期不会为null的内容。您至少可以记录堆栈跟踪吗?这是我假设的,但是我想检查一下。是否有任何方法可以从基本对象获得更多细节?它无权访问记录器…@mattshower您有权访问base.Initialize()
方法代码吗?我有。我已经知道哪里出了问题。但我仍然可以从代码中得到一些反馈来找出原因。@mattstrower顺便说一句,您在异常对象中没有收到堆栈跟踪,这很奇怪,可能是异常被重新抛出了?
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);
}
}
}