You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Form1与Satellite、Radar类间传folders列表并避免循环实例化

解决循环实例化问题的三种可行方案

问题核心是在Satellite/Radar类中主动创建了新的Form1实例,而非复用当前已经存在的Form1实例,才触发了无限循环的实例化流程。可以按需选择以下任意一种方案解决:

方案1:构造函数传递folders列表(最推荐,耦合度最低)

仅把Satellite/Radar需要的folders列表通过构造函数传入,不需要传递整个Form1实例,代码耦合度最低。

第一步:修改Satellite/Radar类代码

删除类中Form1 f1 = new Form1();的定义,新增私有字段存储传入的folders,同时新增带参数的构造函数:

namespace Extract
{
    class Satellite
    {
        private List<string> satelliteUrls = new List<string>();
        private string mainUrl = "https://de.sat24.com/de/eu/infraPolair/";
        private string[] statements;
        // 新增私有字段存储folders
        private List<string> _folders;

        // 新增带参数的构造函数
        public Satellite(List<string> folders)
        {
            _folders = folders;
        }

        // 类内其他方法直接使用 _folders 即可访问该列表
    }
}

Radar类做完全相同的修改即可。

第二步:修改Form1实例化代码

在Form1构造函数实例化Satellite和Radar时,把当前Form1的folders列表作为参数传入:

sat = new Satellite(folders);
rad = new Radar(folders);

方案2:构造函数传递当前Form1实例

如果Satellite/Radar后续还需要访问Form1的其他公共成员,可以直接把当前运行的Form1实例传入,不需要创建新的Form1实例。

第一步:修改Satellite/Radar类代码

namespace Extract
{
    class Satellite
    {
        private List<string> satelliteUrls = new List<string>();
        private string mainUrl = "https://de.sat24.com/de/eu/infraPolair/";
        private string[] statements;
        private Form1 _currentForm1;

        public Satellite(Form1 form1)
        {
            _currentForm1 = form1;
        }

        // 类内使用 _currentForm1.folders 访问列表,也可访问Form1其他公共成员
    }
}

第二步:修改Form1实例化代码

实例化时传入this(指代当前正在运行的Form1实例):

sat = new Satellite(this);
rad = new Radar(this);

方案3:属性注入

如果实例化Satellite/Radar时,folders列表还没有完成初始化,可以选择属性注入的方式:

第一步:修改Satellite/Radar类代码

新增公共的Folders属性:

namespace Extract
{
    class Satellite
    {
        private List<string> satelliteUrls = new List<string>();
        private string mainUrl = "https://de.sat24.com/de/eu/infraPolair/";
        private string[] statements;
        // 新增公共属性
        public List<string> Folders { get; set; }
    }
}

第二步:Form1中给属性赋值

sat = new Satellite();
sat.Folders = folders;
rad = new Radar();
rad.Folders = folders;

内容的提问来源于stack exchange,提问作者Daniel Lip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 18:45:01