在我的项目中,我想读取一些变量。这些数据是从表单中读取的。但是,我想在我的整个项目中使用它们作为变量。在整个项目中使用这些变量的正确方式是什么?
这是读取变量的部分。
public void ReadSetupData() {
Constants setup = new Constants();
setup.cassette0 = tbCassette0.Text;
setup.cassette1 = tbCassette1.Text;
setup.cassette2 = tbCassette2.Text;
setup.cassette3 = tbCassette3.Text;
setup.cassette4 = tbCassette4.Text;
setup.flowController = tbFlowController.Text;
setup.valve = tbValve.Text;
setup.flowDeviation = Convert.ToDouble(tbMaxFlowDev);
setup.flowSet = Convert.ToDouble(tbFlowInput);
setup.flushTime = Convert.ToDouble(tbFlushTime);
setup.flushTimeCalibration = Convert.ToDouble(tbFlushTimeCalibration);
setup.intervalAveragePoints = Convert.ToDouble(tbIntervalAverage);
setup.movingAverageSize = Convert.ToDouble(tbMovingAverageSize);
setup.secsPerConcentration = Convert.ToDouble(tbSecsPerConc);
}这是我用所有变量创建的类。此类与窗体不在同一类中。
public class Constants{
public string cassette0;
public string cassette1;
public string cassette2;
public string cassette3;
public string cassette4;
public string flowController;
public string valve;
public double flowDeviation;
public double secsPerConcentration;
public double intervalAveragePoints;
public double movingAverageSize;
public double flowSet;
public double flushTime;
public double flushTimeCalibration;
}发布于 2021-04-13 15:35:08
您正在寻找的是Singleton:确保一个类只有一个实例,并提供对它的全局访问点。
public class Singleton
{
public string cassette0;
public double flushTimeCalibration;
private static Singleton _instance;
// Constructor is 'protected'
protected Singleton()
{
}
public static Singleton Instance()
{
// Uses lazy initialization.
// Note: this is not thread safe.
if (_instance == null)
{
_instance = new Singleton();
}
return _instance;
}
}另请参阅:Difference between static class and singleton pattern?
为了访问该变量,只需调用静态实例方法即可,该方法可确保在需要时初始化类:
Singleton.Instance().cassette0 = "Cassette0";发布于 2021-04-13 16:22:46
为了补充Matthias的响应,下面是我最常使用的Singleton模式的线程安全实现:
public sealed class Constants
{
private static readonly Constants instance = new Constants();
static Constants() { }
private Constants() { }
public static Constants Instance { get { return instance; } }
public string cassette0;
public string cassette1;
public string cassette2;
public string cassette3;
public string cassette4;
public string flowController;
public string valve;
public double flowDeviation;
public double secsPerConcentration;
public double intervalAveragePoints;
public double movingAverageSize;
public double flowSet;
public double flushTime;
public double flushTimeCalibration;
}然后在需要的地方调用它,如下所示:
var constants = Constants.Instance;发布于 2021-04-13 20:16:23
使用ExpressSettings库可以很容易地实现它。它会将一个settings.json文件放到bin文件夹中,以便以JSON格式存储任何类型设置
如果您使用的是.Net框架
Install-Package Twileloop.ExpressSettings -Version 1.0.0或者,如果您使用的是.Net核心
Install-Package Twileloop.ExpressSettingsCore -Version 1.0.0现在使用函数读取数据,并返回这些常量
public Constants ReadSetupData() {
Constants setup = new Constants();
setup.cassette0 = tbCassette0.Text;
setup.cassette1 = tbCassette1.Text;
setup.cassette2 = tbCassette2.Text;
setup.cassette3 = tbCassette3.Text;
setup.cassette4 = tbCassette4.Text;
setup.flowController = tbFlowController.Text;
setup.valve = tbValve.Text;
setup.flowDeviation = Convert.ToDouble(tbMaxFlowDev);
setup.flowSet = Convert.ToDouble(tbFlowInput);
setup.flushTime = Convert.ToDouble(tbFlushTime);
setup.flushTimeCalibration = Convert.ToDouble(tbFlushTimeCalibration);
setup.intervalAveragePoints = Convert.ToDouble(tbIntervalAverage);
setup.movingAverageSize = Convert.ToDouble(tbMovingAverageSize);
setup.secsPerConcentration = Convert.ToDouble(tbSecsPerConc);
return setup;
}然后保存到设置文件中,
var setup = ReadSetupData();
Settings<Constants>.Write(setup);现在,当你想在其他地方阅读它时
var setup = Settings<Constants>.Read();有关更多信息,请访问:https://github.com/sangeethnandakumar/Express-Settings
https://stackoverflow.com/questions/67070431
复制相似问题