从类中拉出属性

时间:2014-06-13 13:51:56

标签: c#

我正在尝试将PullConstants类中的属性拉到CreateForecast类。在CreateForecast中,我使用此代码创建了一个PullConstants实例。我还验证了这两个类都在同一名称空间中。

PullConstants pc = new PullConstants();

但是,当我尝试使用下面的代码将PullConstants中的值拉到CreateForecast时,我总是收到0。

double sla = pc.sla;

我已经验证了该值是从数据库中正确提取的,但是它的范围似乎没有超出该类的第一次运行。我究竟做错了什么,因为我无法从PullConstants中提取正确的属性值?

PullConstants类如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data.MySqlClient;

namespace ForecastBuilder
{
    class PullConstants
    {
        InitializeDB idb = new InitializeDB();
        ErrorLogger el = new ErrorLogger();

        public double sla { get; set; }
        public int serviceTime { get; set; }
        public int avgHandleTime { get; set; }
        public int maxWait { get; set; }
        public double shrinkageAdjustment { get; set; }
        public double alpha { get; set; }
        public double beta { get; set; }
        public double specialDayPerInc { get; set; }

        public void PullConstantValues()
        {
            idb.OpenDatabases();

            try
            {
                string sqlConstants = "select * from forecastconstants";
                MySqlCommand cmdConstants = new MySqlCommand(sqlConstants, idb.myconn);
                MySqlDataReader rdrConstants = cmdConstants.ExecuteReader();
                while (rdrConstants.Read())
                {
                    sla = double.Parse(rdrConstants["SLA"].ToString());
                    serviceTime = int.Parse(rdrConstants["ServiceTime"].ToString());
                    avgHandleTime = int.Parse(rdrConstants["AvgHandleTime"].ToString());
                    maxWait = int.Parse(rdrConstants["MaxWait"].ToString());
                    shrinkageAdjustment = double.Parse(rdrConstants["ShrinkageAdjustment"].ToString());
                    alpha = double.Parse(rdrConstants["Alpha"].ToString());
                    beta = double.Parse(rdrConstants["Beta"].ToString());
                    specialDayPerInc = double.Parse(rdrConstants["SitCallIncrPer"].ToString());
                }
            }
            catch (Exception e)
            {
                el.createError(2, e.ToString(), "Could not pull constants");
            }
            finally
            {
                idb.myconn.Close();
            }
        }
    }
}

2 个答案:

答案 0 :(得分:2)

我猜你错过了对PullConstantValues的调用:

PullConstants pc = new PullConstants();
pc.PullConstantValues();
double sla = pc.sla;

如果提供这些值是此类的唯一目的,您最好将其用作构造函数:

class PullConstants
{
    /* ... */

    public PullConstants() // instead of 'void PullConstantValues()'
    {
        /* ... */
    }
}

如果是“真实常量”,也可以使用单例来不每次查询数据库。

答案 1 :(得分:0)

要么您缺少对此功能的调用

 public void PullConstantValues();

或者您可以考虑通过将此函数更改为

来使此函数成为构造函数
 public PullConstant();