我需要帮助解决这个问题。我已经尝试过搜索,我想我可能已经找到了使用Singleton Design模式的解决方案,但是想要确定。
我有一个Windows表单应用程序,我用Visual C#编写。我正在编写一个SerialPort类,因此可以通过所有表单共享(我不需要多个串口实例)。这是为了将逻辑与GUI分开。所有表单都可以对SerialPort类进行各种更改,如波特率,写入,读取等。
实施此解决方案的最佳方法是什么?我是OOP的新手,所以关于读数的任何建议都会很棒。
答案 0 :(得分:3)
正如您已经说过的,可以使用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;
}
}
请注意,如果您的静态实例将用于多个线程,则您的类应锁定共享资源。我将提及Thread Safe Code
答案 1 :(得分:1)
@ Luiggi解决方案的替代方案,这里有一点线索良心:
public sealed class SerialPort
{
private static volatile SerialPort instance;
private static object threadLock = new Object();
/// <summary>Retrieve an instance of SerialPort</summary>
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(...);
有关this Singleton pattern的更多信息。
答案 2 :(得分:1)
实际上,我昨天遇到了同样的问题,我想我可能已经找到了一种更简单的方法来处理这个问题,而不是使用单例方法。我创建了一个类文件,并创建了一个名为public class Serial
的类。在里面我将我的序列变量声明为static SerialPort
(即static SerialPort serial
);与计时器相同,如果你需要使用一个。为set创建一个函数并调用serialStatus
,它设置public static bool
。我真的想在这里发布我的代码,但我真的不明白如何正确地做到这一点。在您的表单中,您将有第一个表单启动串行端口。对于另一种形式,你所要做的就是声明Serial serial = new Serial();
拉出方法,你就可以了。如果您需要更改串行设置,可以使用bool输入创建一个方法(即true
,serial.Close();
然后使用新设置重新启动串行。