CBOR(Concise Binary Object Representation)是一种高效的二进制数据格式,适用于紧凑的数据存储和交换。本文将展示如何使用CBOR库在C#中实现一个计算器程序,并探讨其在程序设计中的应用以及用户设置的存储技巧。
计算器程序的核心功能是执行计算。这个计算器程序利用CBOR库支持的任意精度小数计算。虽然64位二进制浮点数类型(double)适用于大多数情况,但由于其使用二进制而非十进制系统,有时可能会产生不符合直觉的结果。CBOR库支持任意精度的数字(包括二进制和十进制),主要是因为CBOR的一些标签(其中两个在定义CBOR的RFC中定义)支持这类数字,并且在这些数字上执行算术和其他有用的操作是有益的。
计算器状态类(CalculatorState
)存储计算器的当前状态,例如当前显示的数字和正在执行的操作。以下是CalculatorState
类的一些方法:
public CalculatorState(int maxDigits);
public string Text { get; }
public bool DotButton();
public bool PlusMinusButton();
public bool EqualsButton();
public bool DigitButton();
构造函数CalculatorState
初始化一个计算器状态,其数字精度为maxDigits
。这意味着显示上将显示多达该数量的数字。计算器程序将其设置为18(在MainForm
构造函数中),但可以设置为任何所需的数字(只要它大于或等于1)。
CalculatorState
类的存在是一种抽象;它将计算器逻辑与计算器用户界面分离,并可以被认为是“模型-视图-控制器”设计模式中的“模型”部分。由于这种抽象,这个类可以在其他需要计算器功能的程序中使用,而不仅仅是Windows Forms程序。
CBOR的紧凑数据格式非常适合存储用户设置等信息。计算器程序展示了这一点;当程序退出时,它获取窗口的当前位置和大小,将它们存储在用户设置对象中,并将用户设置对象转换为CBOR文件。
ProgramConfig
类用于存储用户设置。它具有以下方法:
public ProgramConfig(string configName);
public ProgramConfig SetObject(string name, object obj);
public string GetString(string name);
public int GetInt32OrDefault(string name, int defaultValue);
public double GetDoubleOrDefault(string name, double defaultValue);
public double GetDouble(string name);
如果程序安装在只读位置,例如“Program Files”文件夹,计算器将用户设置存储在每个用户的应用程序存储中。这可以通过.NET 4支持的System.IO.IsolatedStorage
命名空间实现。