这两天由于项目需要,调试了一下C#的串口通讯,参考了以前做的Android项目所用的设计模式:
父类DataTransport设计成单例模式,程序始终保持只有一种通讯链路,DataTransport中的方法都由子类实现。
由于对C#不是很熟练,调试过程中遇到了较多问题,最终通过努力找到了解决方法,稍微总结一下。
变参函数
串口、蓝牙和Wifi的设置参数不同,它们各自的setConfig函数的形参也不同,如果设计不同的方法,父类就不能统一继承了。使用C#的__arglist来解决这个问题。
DataTransport.cs
public virtual void setConfig(__arglist) { }
Usart.cs
public override void setConfig(__arglist)
{
ArgIterator args = new ArgIterator(__arglist);
if (args.GetRemainingCount() > 0)
{
port.PortName = TypedReference.ToObject(args.GetNextArg()).ToString();
port.BaudRate = Convert.ToInt32(TypedReference.ToObject(args.GetNextArg()));
port.DataBits = Convert.ToInt32(TypedReference.ToObject(args.GetNextArg()));
port.StopBits = (StopBits)TypedReference.ToObject(args.GetNextArg())