c#确定传递“this”以获得更高级别的访问权限?

时间:2011-10-12 22:44:07

标签: c# class

我只是想知道以下内容是否正常或是否违反了良好的编程习惯。

public class CircuitController   // Library class to get/set controller settings.
{
   ...
   private int numberOfAttachedSensors;   // Number of sensors attached to the controller circuit. I have get/set properties.
   private SensorSettings sensorSettings; // Class to hold the controller's sensor settings and get/set serial methods. I have get property.
   ...

   public CircuitController(SerialPort serialPort, ...)
   {
      ... // Set other fields.
      sensorSettings = new SensorSettings(this);   // Is this considered OK? I use it so that I can access the get property of numberOfAttachedSensors in the SensorSettings class.
      ...
   }
}

public class SensorSettings   // Class to hold the controller's sensor settings and get/set serial methods.
{
   private CircuitController controller; // Set in constructor.

   public SensorSettings(CircuitController controller) {this.controller = controller;}

   public double[] ReturnSensorValues() 
   {
       ...
       double[] resultArray = new double[this.controller.NumberOfSensorsAttachedGetProperty]; // Now I can "look up" to see the current number of sensors.
       ...
    }
}

基本上,最通用的控制器设置(控制器名称,是打开/关闭等)都在CircuitController类中,但更具体的设置在SensorSettings类下“分组”。在SensorSettings内我有时需要更高级别设置的状态,所以这是我的解决方案。我只是想知道这是否正常,或者是否有更优雅的解决方案。

感谢。

修改

我简化了一些事情。基本上这个控制电路有大约100个它理解的串行功能(在获取控制器的设置和设置它们之间混合)。手动输入命令字符串是一件痛苦的事情,所以我正在制作一个库类,它为我做了所有字符串命令汇编。但是,因为有100个设置及其各自的get / set函数,所以我不想将它们全部置于CircuitController类之下。控制器功能分为三个类别:传感器(多个)设置,输出设置和环境设置。所以我为每个创建了一个类来存储设置和相应的get / set方法,这些方法创建了正确的命令字符串。不幸的是,有一些交叉。例如,OutputSettings类下的方法主要使用自己的设置,但可能需要Environment类中的一个。希望有意义......

3 个答案:

答案 0 :(得分:1)

我认为这样做没有任何问题,假设SensorSettings确实需要知道传感器的数量(在任何给定时间)。

我建议将CircuitController实例作为某种接口传递。例如,ControlSettings真的需要CircuitController,还是需要ISensorCountProvider接口或ICircuitController接口?

通过使用这样的接口,您不会强制这些类相互依赖。

答案 1 :(得分:1)

我会尝试重新思考你是如何建模你的课程/抽象的。 SensorSettings是否代表一个传感器或许多传感器的数据?

如果它适用于一个传感器,那么它不应该需要传感器的数量,并且任何跨多个传感器操作的逻辑(例如构建值数组)应该驻留在Controller类中(或者任何类都是模拟一系列传感器。)

如果SensorSettings用于建模传感器集合,那么传感器的数量可能应该传递给它的构造函数。

答案 2 :(得分:1)

如果我理解正确:

  • 每个CircuitController只有一个SensorSettings“child”,表示电路中所有传感器共享的设置。
  • 每个SensorSettings都只有一个CircuitController“parent”。
  • 孩子需要父母的信息,反之亦然。

所以我不确定将SensorSettings方法分组到一个单独的类中是否有意义。有一个很好的理由让对象成为一对一的关系,但在这种情况下,我只是没有看到它。你能详细说明你为什么这样做吗?