获得与在静态类中实现接口相同功能的另一种方法是什么?

游泳自行车

我做了一些控制硬件的功能。但是,如果存在实际硬件(G.demomode = true),我也要称呼实现相同接口的实际硬件功能。

您可以在下面看到我的尝试,但是这一行DVDDHW.setSupply(voltage);不太正确,即因为静态类无法实现接口。有一个更好的方法吗?

最终目标是为硬件工程师定义一个要遵循的接口(也许这不是正确的词),以便他可以在该接口中指定未指定的功能。

我尝试进行搜索的尽职调查,并且发现了与此主题相关的多个主题。但是,我无法全神贯注于如何为用例实现其替代解决方案。任何帮助或指针将是巨大的。

谢谢!

public interface IPowerSupply
{
    bool setSupply(double voltage);
}

public static class DVDDHW : IPowerSupply
{
    public bool setSupply(double voltage)
    {
        i2c.write("DVDD ON"); //or something that involves turning the real hardware on
        return true;
    }
}

public class DVDD : IPowerSupply
{
    public bool setSupply(double voltage)
    {
        DevLog.DevLog.addToLog(string.Format("Supply set: {0}V: ", voltage) + this.GetType().ToString());
        if (G.demoMode == false) //demoMode is false because HW is connected
            {
                DVDDHW.setSupply(voltage); //What is another way to accomplish this?
            }
        return true;
    }
}


//Code to execute below:
foreach PowerSupply ps in PowerSupplyList // List contains an instance of DVDD in this example
{
    ps.setSupply(3.5); // Set each supply to 3.5V
}
基思·佩恩

如果您只想要实现一个接口的类的一个实例,则可以采用单例方式。

MS的使用方法是https://msdn.microsoft.com/en-us/library/ff650316.aspx

对于您的代码,以下将起作用:

public interface IPowerSupply
{
    bool setSupply(double voltage);
}

public class DVDDHW : IPowerSupply
{
    IPowerSupply _instance;

    public static IPowerSupply Instance
    {
        get
            {
                if (_instance == null)
                    _instance = new DVDDHW();
                return _instance;
            }
    }
    private DVDDHW() { }

    public bool setSupply(double voltage)
    {
        i2c.write("DVDD ON"); //or something that involves turning the real hardware on
        return true;
    }
}

public class DVDD : IPowerSupply
{
    public bool setSupply(double voltage)
    {
        DevLog.DevLog.addToLog(string.Format("Supply set: {0}V: ", voltage) + this.GetType().ToString());
        if (G.demoMode == false) //demoMode is false because HW is connected
            {
                DVDDHW.setSupply(voltage); //What is another way to accomplish this?
            }
        return true;
    }
}


//Code to execute below:
foreach PowerSupply ps in PowerSupplyList // List contains an instance of DVDD in this example
{
    ps.setSupply(3.5); // Set each supply to 3.5V
}

与静态类相比,单例的行为方式略有不同。如果您的应用程序是多线程的,或者在构造函数中还有其他一些您希望在首次访问该类型时首次运行的代码,则这些代码很重要。如果这些东西对您没有任何意义,那么您就不必担心:)

编辑:

正如Scott所指出的,get访问器中的代码是不必要的。简化的版本是这样的:

public class DVDDHW : IPowerSupply
{
    static readonly IPowerSupply _instance = DVDDHW();

    public static IPowerSupply Instance
    {
        get { return _instance; }
    }

    private DVDDHW() { }

    public bool setSupply(double voltage)
    {
        i2c.write("DVDD ON"); //or something that involves turning the real hardware on
        return true;
    }
}

另外,此代码有错别字(固定):

//Code to execute below:
foreach IPowerSupply ps in PowerSupplyList // List contains an instance of DVDD in this example
{
    ps.setSupply(3.5); // Set each supply to 3.5V
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从派生类实现基类构造函数特化的另一种方法是什么?

来自分类Dev

从派生类实现基类构造函数专业化的另一种方法是什么?

来自分类Dev

此代码的另一种方法是什么?

来自分类Dev

使char的int值递增的另一种方法是什么?

来自分类Dev

此代码的另一种方法是什么?

来自分类Dev

类中的PHP方法与另一种方法?

来自分类Dev

在 Python 中从另一种方法调用一种方法

来自分类Dev

在功能性Scala中,将一种参数化类型转换为另一种参数化的好方法是什么?

来自分类Dev

为什么一种方法有效,而另一种无效?

来自分类Dev

Moq伪造一种方法,但使用另一种方法的实际实现

来自分类Dev

在 C++ 编程中移动到下一行的另一种方法是什么

来自分类Dev

使用方法返回值作为参数与在一种方法中设置类变量并将其用作另一种方法的参数

来自分类Dev

通过Codeigniter控制器类中的视图将变量的值从一种方法保留到另一种方法

来自分类Dev

无需执行功能即可分配功能的另一种方法

来自分类Dev

方法的擦除与另一种方法的类型相同

来自分类Dev

获得数组整数的所有组合的另一种方法

来自分类Dev

在Eclipse中从一种方法跳转到另一种方法的快捷方式

来自分类Dev

如何在Java(android)中的另一种方法中使用一种方法的变量

来自分类Dev

从另一种方法检索到的一种方法中设置的属性返回null

来自分类Dev

如何将一种方法中的变量用于另一种方法?

来自分类常见问题

用Java语言以一种或另一种方式初始化静态变量的正确方法或潜在的区别是什么?

来自分类Dev

为什么这种解决“女王”困境的方法比Haskell中的另一种方法慢得多?

来自分类Dev

无法弄清楚为什么作为另一种方法中的参数的方法正在重复

来自分类Dev

调用get方法的另一种方法

来自分类Dev

对代表一行的类中的每个属性都使用吸气剂是一种好习惯,还是我应该研究另一种方法?

来自分类Dev

覆盖另一种方法使用的超类回调函数[C ++]

来自分类Dev

将类传递给另一种方法

来自分类Dev

找出一种方法是否可以调用另一种方法

来自分类Dev

terraform计划是一种方法,但不是另一种方法?

Related 相关文章

  1. 1

    从派生类实现基类构造函数特化的另一种方法是什么?

  2. 2

    从派生类实现基类构造函数专业化的另一种方法是什么?

  3. 3

    此代码的另一种方法是什么?

  4. 4

    使char的int值递增的另一种方法是什么?

  5. 5

    此代码的另一种方法是什么?

  6. 6

    类中的PHP方法与另一种方法?

  7. 7

    在 Python 中从另一种方法调用一种方法

  8. 8

    在功能性Scala中,将一种参数化类型转换为另一种参数化的好方法是什么?

  9. 9

    为什么一种方法有效,而另一种无效?

  10. 10

    Moq伪造一种方法,但使用另一种方法的实际实现

  11. 11

    在 C++ 编程中移动到下一行的另一种方法是什么

  12. 12

    使用方法返回值作为参数与在一种方法中设置类变量并将其用作另一种方法的参数

  13. 13

    通过Codeigniter控制器类中的视图将变量的值从一种方法保留到另一种方法

  14. 14

    无需执行功能即可分配功能的另一种方法

  15. 15

    方法的擦除与另一种方法的类型相同

  16. 16

    获得数组整数的所有组合的另一种方法

  17. 17

    在Eclipse中从一种方法跳转到另一种方法的快捷方式

  18. 18

    如何在Java(android)中的另一种方法中使用一种方法的变量

  19. 19

    从另一种方法检索到的一种方法中设置的属性返回null

  20. 20

    如何将一种方法中的变量用于另一种方法?

  21. 21

    用Java语言以一种或另一种方式初始化静态变量的正确方法或潜在的区别是什么?

  22. 22

    为什么这种解决“女王”困境的方法比Haskell中的另一种方法慢得多?

  23. 23

    无法弄清楚为什么作为另一种方法中的参数的方法正在重复

  24. 24

    调用get方法的另一种方法

  25. 25

    对代表一行的类中的每个属性都使用吸气剂是一种好习惯,还是我应该研究另一种方法?

  26. 26

    覆盖另一种方法使用的超类回调函数[C ++]

  27. 27

    将类传递给另一种方法

  28. 28

    找出一种方法是否可以调用另一种方法

  29. 29

    terraform计划是一种方法,但不是另一种方法?

热门标签

归档