[英]C# Reading variables and using them in other class
在我的項目中,我想讀取一些變量。 該數據是從表單中讀取的。 但是,我想在整個項目中將它們用作變量。 在整個項目中使用這些變量的正確方法是什么?
這是讀取變量的部分。
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);
}
這是我用所有變量制作的 class。 此 class 與表單不在同一個 class 內。
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;
}
您正在尋找的是 Singleton:確保 class 只有一個實例並提供對其的全局訪問點。
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;
}
}
另請參閱: static class 和 singleton 模式之間的區別?
為了訪問變量,只需調用 static 實例方法,確保在需要時實例化 class:
Singleton.Instance().cassette0 = "Cassette0";
為了補充 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;
您可以使用 ExpressSettings 庫輕松實現它。 它會將 settings.json 文件寫入 bin 文件夾,以 JSON 格式存儲任何類型的設置
如果你在.Net Framework
Install-Package Twileloop.ExpressSettings -Version 1.0.0
或者,如果你在.Net Core
Install-Package Twileloop.ExpressSettingsCore -Version 1.0.0
現在用您的 function 讀取您的數據,並返回該常量
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.