首页 > 解决方案 > 如何在另一个类中引用和存储一个类的属性

问题描述

我正在为具有多个硬件输入(一个模拟,两个数字)的设备编写一个类,我想在传感器类的构造函数中使用硬件类(ADC1、DI1、DI2 等)的属性。我该怎么做呢?

所以我有一个硬件类,可以让我访问我的硬件。还有更多输入,但截断版本如下所示:

public class HWClass
{
    public GpioPin INPUT1;
    public GpioPin INPUT2;
    public double ADC1Value { get => ADC1(); }
    private double ADC1()
    {
        //ADC code here
    }
}

我有一个使用一个模拟输入和两个数字输入的传感器。我想使用一个类来提供一些抽象。理想情况下,将输入放入类构造函数中。目前我的传感器类如下所示:

public class sensor
{
    private double AnalogInput;
    private GpioPin Input1;
    private GpioPin Input2;

    public Sensor(ref double analogInput, ref GpioPin input1, ref GpioPin input2)
    {

    }
}

在我的主要课程中,我希望能够将输入分配给传感器,因为我有多个相同的传感器。下面是这样的:


public class myApp
{
    private HWClass myHardware;

    public myApp()
    {
        sensor sensor1 = new sensor(myHardware.ADC1Value, myHardware.Input2, myHardware.Input3)
        sensor sensor2 = new sensor(myHardware.ADC3Value, myHardware.Input5, myHardware.Input4)

}

我希望能够存储构造函数引用并使其工作类似于上面。我该怎么做呢?

谢谢!!

标签: c#windows-10-iot-core

解决方案


构造函数不能接受ref参数。

public Sensor(double analogInput, GpioPin input1, GpioPin input2)
{
    AnalogInput = analogInput;
    Input1 = input1;
    Input2 = input2;
}

或者,您可以提供复杂对象的实例。

public Sensor(HWClass hw)
    : this(hw.ADC1Value, hw.INPUT1, hw.INPUT2)
{
}

或者,如果您愿意,只需在内部存储该复杂对象。

public class Sensor
{
    private HWClass hw;

    public Sensor(HWClass hw)
    {
        this.hw = hw;
    }
}

请注意,值类型被复制到另一个类中,而引用类型指向同一个引用。如果您想在另一个类中存储引用类型的副本,您应该创建一个新实例,例如通过实现ICloneable.


推荐阅读