簡體   English   中英

C# 讀取變量並在其他 class 中使用它們

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM