首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#读取变量并在其他类中使用它们

C#读取变量并在其他类中使用它们
EN

Stack Overflow用户
提问于 2021-04-13 15:26:35
回答 3查看 82关注 0票数 1

在我的项目中,我想读取一些变量。这些数据是从表单中读取的。但是,我想在我的整个项目中使用它们作为变量。在整个项目中使用这些变量的正确方式是什么?

这是读取变量的部分。

代码语言:javascript
复制
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);
}

这是我用所有变量创建的类。此类与窗体不在同一类中。

代码语言:javascript
复制
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;
}
EN

回答 3

Stack Overflow用户

发布于 2021-04-13 15:35:08

您正在寻找的是Singleton:确保一个类只有一个实例,并提供对它的全局访问点。

代码语言:javascript
复制
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?

为了访问该变量,只需调用静态实例方法即可,该方法可确保在需要时初始化类:

代码语言:javascript
复制
Singleton.Instance().cassette0 = "Cassette0";
票数 0
EN

Stack Overflow用户

发布于 2021-04-13 16:22:46

为了补充Matthias的响应,下面是我最常使用的Singleton模式的线程安全实现:

代码语言:javascript
复制
    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;
    }

然后在需要的地方调用它,如下所示:

代码语言:javascript
复制
var constants = Constants.Instance;
票数 0
EN

Stack Overflow用户

发布于 2021-04-13 20:16:23

使用ExpressSettings库可以很容易地实现它。它会将一个settings.json文件放到bin文件夹中,以便以JSON格式存储任何类型设置

如果您使用的是.Net框架

代码语言:javascript
复制
Install-Package Twileloop.ExpressSettings -Version 1.0.0

或者,如果您使用的是.Net核心

代码语言:javascript
复制
Install-Package Twileloop.ExpressSettingsCore -Version 1.0.0

现在使用函数读取数据,并返回这些常量

代码语言:javascript
复制
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;
}

然后保存到设置文件中,

代码语言:javascript
复制
var setup = ReadSetupData();
Settings<Constants>.Write(setup);

现在,当你想在其他地方阅读它时

代码语言:javascript
复制
var setup = Settings<Constants>.Read();

有关更多信息,请访问:https://github.com/sangeethnandakumar/Express-Settings

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67070431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档