我想知道一个类的实例是否可以在运行时保留数据的同时访问其父类的方法。 (这有意义吗?)

如果有多个COM端口设置,我有一个ConnectionManager会生成多个连接器(负责COM端口通信)。

file1.cs

namespace connector
{
public class connectormanager : idisposable
{
  public connectormanager(comport1, comport2, retries, delay)
  {
    // create dictionary that maps COMPorts with devices
    // **foreach spawn connector (if com port range is given)**
  }

  public searchchannel()
  {
    // search existing com ports
  }
}
}


file2.cs

namespace connector
{
  public class connector : idisposable
{
  public void connector(port, retries, delay)
  {
  // there is a timer with a timeout event defined
  }

  // com port read/write operations

  void _timer_Elapsed()
  {
    // **i want to access searchchannel**
    // problem is if i create a new instance of connectionmanager
    // i lose all the dictionary stuff
  }
}
}


这两个文件都在相同的解决方案和项目下。我想做的是从file2.cs中的_timer_Elapsed访问搜索通道,而不创建连接器管理器的新实例。

任何意见或帮助,不胜感激。

最佳答案

您的ConnectorManager对我来说就像个工厂。您不应自己调用Connector构造函数,而应在ConnectorManager类中添加CreateConnector函数。

在这个工厂中,您将调用Connector构造函数,并将ConnectorManager实例传递给它。

连接器将存储此实例,并根据需要使用它。

public class ConnectorManager
{
  public Connector CreateConnector()
  {
      return new Connector(comport1, comport2, retries, delay,this);
  }
  [...]
}

public class Connector
{
  private ConnectorManager connectorManager;

  internal Connector(int comport1, int comport2, int retries, int delay, ConnectorManager manager)
  {
     connectorManager = manager;
     [...]
   }
   [...]
}


请注意,Connector构造函数是内部的,不应从程序集外部调用它。您不应该在不使用ConnectorManager.CreateConnector()的情况下实例化连接器。

如果您的ConnectorManager构造函数读得不好,那么单例模式将不适合您的需要,是否可以为不同的端口配置实例化几个ConnectorManager,是真的吗?

10-04 13:30