在多个表单之间共享一个类

我需要帮助解决这个问题。 我尝试过搜索,我想我可能已经找到了使用Singleton Design模式的解决方案,但我想确保。

我有一个Windows表单应用程序,我在Visual C#中编写。 我正在编写一个SerialPort类,所以它可以通过所有表单共享(我不需要多个串口实例)。 这是为了将逻辑与GUI分开。 所有表单都可以对SerialPort类进行各种更改,如波特率,写入,读取等。

实施此解决方案的最佳方法是什么? 我是OOP的新手,所以关于读数的任何建议都会很棒。

作为@Luiggi解决方案的替代方案,这里有一个更多的线程良心:

public sealed class SerialPort { private static volatile SerialPort instance; private static object threadLock = new Object(); /// Retrieve an instance of SerialPort public static SerialPort Instance { get { if (SerialPort.instance == null) { lock (SerialPort.threadLock) { if (SerialPort.instance == null) { SerialPort.instance == new Serialport(); } } } return SerialPort.instance; } } private SerialPort(){} } 

然后,在实践中:

 SerialPort sp = SerialPort.Instance; sp.MyMethod(...); 

有关此Singleton模式的更多信息。

正如您已经说过的,使用Singleton设计模式可以解决这个问题。 这是一个小样本:

 public class MySingleton() { private static MySingleton instance = new MySingleton(); //your attributes go here... private MySingleton() { //your logic goes here... } public static MySingleton getInstance() { return instance; } } 

请注意,如果您的静态实例将用于多个线程,则您的类应该锁定共享资源。 我将让你参考线程安全代码

实际上,我昨天遇到了同样的问题,我想我可能已经找到了一种更简单的方法来处理这个问题,而不是使用单例方法。 我创建了一个类文件,并创建了一个名为public class Serial 。 在里面我将我的串行变量声明为static SerialPort (即static SerialPort serial ); 与计时器相同,如果你需要使用一个。 为set创建一个函数并获取名为serialStatus的函数,它设置一个public static bool 。 我真的想在这里发布我的代码,但我真的不明白如何正确地做到这一点。 在您的表单中,您将有第一个表单启动串行端口。 对于另一种forms,您所要做的就是声明Serial serial = new Serial(); 拉出方法,你很高兴。 如果需要更改串行设置,可以使用bool输入创建方法(即,如果为trueserial.Close();然后使用新设置重新启动串行。