c# - Stackoverflow - 具有构造函数和初始值设定项的两个类之间的无限递归

标签 c# constructor initialization stack-overflow

我遇到了一些问题,不知道该如何解决。我有两个名为 DatabaseManagment 和 Logger 的类,它们相互引用。但是,由于无休止的递归,我得到了一个 stackoverflow 错误。由于我在 DatabaseManagement 中创建了一个 Logger 实例,并在 Logger 类中创建了一个 DatabaseMangement 实例,因此程序会在每个类之间无休止地运行,直到失败。我在下面放了代码示例。这两个类的功能相互依赖。如果没有递归,每个类如何相互引用?

数据库管理器

class DatabaseManagement
{
    Logger l = new Logger();

    public MySqlConnection myconn { get; private set; }

    public void OpenDatabases()
    {

记录器

class Logger
    {
        DatabaseManagement dm = new DatabaseManagement();

        public void createLogEntry(char logType, string message)
        {

最佳答案

我认为这应该可以解决问题。 整洁:没有静力学。

您需要做的唯一真正的“技巧”是将 this(当前对象的实例,在本例中为 DatabaseManagement 的实例)传递给 Logger 的构造函数.

class DatabaseManagement
{
    private Logger _logger;

    public DatabaseManagement()
    {
        _logger = new Logger(this);
    }
}

class Logger
{
    DatabaseManagement _dm;

    public Logger(DatabaseManagement dm)
    {
        _dm = dm;
    }
}

关于c# - Stackoverflow - 具有构造函数和初始值设定项的两个类之间的无限递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27944122/

相关文章:

c# - 运行时使用模拟的 Windows 服务帐户的 EF Code First 连接字符串

c# - 编写大文件的最佳实践

c++ - 深层复制构造函数 - 类 C++ 中的动态数组无效的 free()/delete/delete[]/realloc()

c++ - 在成员函数中调用类构造函数

c++ - 值初始化 : default initialization or zero initialization?

c# - 在字符串数组中初始化新字符串

c# - 文件解析器在 MVVM 设计模式中属于什么位置?

c++ - 是否立即为对象数组调用构造函数作为类的成员?

Python - 初始化多个列表/行

c# - 如何创建可用的 URL 来打开文档?