子类实例化 | Stackoverflow异常
Subclass instantiation | Stackoverflowexception
我有很多代码,但问题本身对我来说很清楚,所以我发布了一个例子:
public class ExcelTable
{
public ExcelTable() // CONSTRUCTOR
{
// create new excel-application and so on..
}
public ExcelOutput Output = new ExcelOutput(); // Whosebugexception
private xlWorkbook; // I need these to inherit into ExcelOutput
private xlWorksheet; // '' ''
// ... // '' ''
public class ExcelOutput : ExcelTable
{
public void SaveAs()
{
// self explaining
}
public void Show()
{
// self explaining
}
public void Print()
//....
}
}
目标:已编辑
为了明确 helping-class for excel 我的愿望是创建一个 subclass 来处理可能的输出。详细地说,我试图避免从外部创建 2 个实例的需要 => ExcelTable
和 ExcelOutput
。我宁愿创建一个实例 ExcelTable
并使用该实例访问 subclass 。因为我需要继承,所以我无法将 class 设置为静态。
问题:
我收到 Whosebugexception
。我尝试调试我的代码。在 ExcelOutput
的实例化中,代码在这一行循环。意思是:即使我尝试单步执行 (F11),执行也会停留在 ExcelOutput 的状态,这会导致我的工具出现 Whosebugexception。
我试过的:
public ExcelTable() // CONSTRUCTOR
{
// create new excel-application and so on..
Output = Output ?? new ExcelOutput();
}
public ExcelOutput Output;
在这种情况下,ExcelTable
被一遍又一遍地创建。整个鞋面 class 将永远消失。
谁能向我解释为什么这一行会永远循环?看起来 ExcelOutput
的实例正在创建 ExcelTable
.
的新实例
我知道这更多是关于知识的,因为我是继承和子classes 的新手。 Google 在这里帮不了什么大忙。根据 classes、subclasses 和继承,那里的东西太多了。
感谢您的帮助。非常感谢!
当您实例化 ExcelTable 或 ExcelOutput 时,构造函数将初始化 Output 字段,换句话说,它将实例化另一个 ExcelOutput,然后一次又一次,直到您 运行 出栈 space ,然后你收到这个 WhosebugException,你可能不需要 Output 字段,删除它。
如前所述,问题是 ExcelOutput
继承自 ExcelTable
,因此继承了 Output
字段,该字段用 ExcelOutput
的新实例初始化,再次有一个 Output
字段 ...
此递归组合将填充堆栈,从而导致 WhosebugException
异常。
这里有一个快速解决方法,可以帮助您继续:
public class ExcelTable
{
public ExcelTable()
{
// create new excel-application and so on..
//initialize xlWorkbook and xlWorksheet
Output = new ExcelOutput(xlWorkbook, xlWorksheet);
}
public ExcelOutput Output;
private Workbook xlWorkbook;
private Worksheet xlWorksheet;
public class ExcelOutput
{
private Workbook xlWorkbook;
private Worksheet xlWorksheet;
public ExcelOutput(Workbook xl_workbook, Worksheet xl_worksheet)
{
xlWorkbook = xl_workbook;
xlWorksheet = xl_worksheet;
}
public void SaveAs()
{
// self explaining
}
public void Show()
{
// self explaining
}
public void Print()
{
}
//....
}
}
ExcelOutput
不再继承自 ExcelTable
,但它在构造时接收所需的依赖项。
我的解决方案绝不是一个好的设计。我只是给你一个快速修复。好的设计需要了解大局。
我有很多代码,但问题本身对我来说很清楚,所以我发布了一个例子:
public class ExcelTable
{
public ExcelTable() // CONSTRUCTOR
{
// create new excel-application and so on..
}
public ExcelOutput Output = new ExcelOutput(); // Whosebugexception
private xlWorkbook; // I need these to inherit into ExcelOutput
private xlWorksheet; // '' ''
// ... // '' ''
public class ExcelOutput : ExcelTable
{
public void SaveAs()
{
// self explaining
}
public void Show()
{
// self explaining
}
public void Print()
//....
}
}
目标:已编辑
为了明确 helping-class for excel 我的愿望是创建一个 subclass 来处理可能的输出。详细地说,我试图避免从外部创建 2 个实例的需要 => ExcelTable
和 ExcelOutput
。我宁愿创建一个实例 ExcelTable
并使用该实例访问 subclass 。因为我需要继承,所以我无法将 class 设置为静态。
问题:
我收到 Whosebugexception
。我尝试调试我的代码。在 ExcelOutput
的实例化中,代码在这一行循环。意思是:即使我尝试单步执行 (F11),执行也会停留在 ExcelOutput 的状态,这会导致我的工具出现 Whosebugexception。
我试过的:
public ExcelTable() // CONSTRUCTOR
{
// create new excel-application and so on..
Output = Output ?? new ExcelOutput();
}
public ExcelOutput Output;
在这种情况下,ExcelTable
被一遍又一遍地创建。整个鞋面 class 将永远消失。
谁能向我解释为什么这一行会永远循环?看起来 ExcelOutput
的实例正在创建 ExcelTable
.
我知道这更多是关于知识的,因为我是继承和子classes 的新手。 Google 在这里帮不了什么大忙。根据 classes、subclasses 和继承,那里的东西太多了。
感谢您的帮助。非常感谢!
当您实例化 ExcelTable 或 ExcelOutput 时,构造函数将初始化 Output 字段,换句话说,它将实例化另一个 ExcelOutput,然后一次又一次,直到您 运行 出栈 space ,然后你收到这个 WhosebugException,你可能不需要 Output 字段,删除它。
如前所述,问题是 ExcelOutput
继承自 ExcelTable
,因此继承了 Output
字段,该字段用 ExcelOutput
的新实例初始化,再次有一个 Output
字段 ...
此递归组合将填充堆栈,从而导致 WhosebugException
异常。
这里有一个快速解决方法,可以帮助您继续:
public class ExcelTable
{
public ExcelTable()
{
// create new excel-application and so on..
//initialize xlWorkbook and xlWorksheet
Output = new ExcelOutput(xlWorkbook, xlWorksheet);
}
public ExcelOutput Output;
private Workbook xlWorkbook;
private Worksheet xlWorksheet;
public class ExcelOutput
{
private Workbook xlWorkbook;
private Worksheet xlWorksheet;
public ExcelOutput(Workbook xl_workbook, Worksheet xl_worksheet)
{
xlWorkbook = xl_workbook;
xlWorksheet = xl_worksheet;
}
public void SaveAs()
{
// self explaining
}
public void Show()
{
// self explaining
}
public void Print()
{
}
//....
}
}
ExcelOutput
不再继承自 ExcelTable
,但它在构造时接收所需的依赖项。
我的解决方案绝不是一个好的设计。我只是给你一个快速修复。好的设计需要了解大局。