【发布时间】:2019-01-11 16:40:56
【问题描述】:
我正在尝试编写一个类来形成SCPI commands。我希望用法看起来像这样(类似于 Keysight 的 DLL 所做的):
Instrument.SCPI.DISPlay.TEXT.Command("HELLO");
然后它将构造字符串“DISP:TEXT HELLO”,我可以通过 Instrument 类中指定的连接发送该字符串。
我认为像这样的静态抽象类可能会起作用。对于我希望支持的任何乐器,我都可以使用新命令来扩展该类。基于抽象 SCPI 类的“仪器”类可以将生成的字符串传递给串行端口或 TCPIP 或其他任何东西。
public static class SCPI
{
// Mandated commands
public const string CLS = "*CLS";
public const string ESE = "*ESE";
public const string ESR = "*ESR";
public const string IDN = "*IDN?";
public const string OPC = "*OPC";
public const string PSC = "*PSC";
// Display command
public static class DISPlay
{
public const string TEXT = "DISP:TEXT";
}
}
但是,如果我想添加命令“TEXT:CLEar”,它会立即变得不清楚如何继续,因为我无法在 DISPlay 中嵌套另一个名为“TEXT”的类。我该如何正确地做到这一点?具体来说:
- 如何使命令字符串相互构建?
- 如何创建一种方法来接受一个或多个附加到字符串的参数?
- 有没有一种方便的方法可以在字符串之间添加所需的冒号?
- 有没有一种方便的方法可以在查询的末尾添加问号?
【问题讨论】:
-
您在这里面临的问题是,我认为您需要将字符串生成与字符串定义分开,而要做到这一点,我认为您可能不得不放弃
static方法。 -
哦,哇!我不知道方法链是如何工作的,甚至不知道它叫什么。
-
另见构建器模式和流畅接口。这应该足以让你开始。这是一个有趣的问题,可惜我现在没有时间解决这个问题。
标签: c# class abstract-class abstract