C#静态类和数据成员问题

时间:2011-03-18 14:48:02

标签: c# dictionary static static-methods static-members

我不确定如何使用C#.Net 3.5实现我的想法。我有一个名为Common的静态类,它包含常用方法。其中一种方法是PrepareReportParameters。此方法接受字符串ReportParams并解析它以获取参数值。我将此ReportParams字符串加载到Dictionary中。然后验证是否存在所需的元素。我检查一下:

if (ReportParamList.ContainsKey("PAccount"))
{
    ReportParamList.TryGetValue("PAccount", out PrimaryAccount);
}

其中PrimaryAccount是我的Common类中的静态变量。我可以在其他地方访问Common.PrimaryAccount。

尽管如此,访问报告参数的这个方法仍然可行但我希望将PrimaryAccount作为Common.ReportParameters.PrimaryAccount进行访问。 这是问题,我不知道ReportParameters应该是什么类型,如何将所有报告参数添加到此类型?我该如何定义ReportParameters?这听起来是否可行或没有任何意义。请H L L P!

3 个答案:

答案 0 :(得分:4)

听起来你基本习惯使用全局变量传递状态。这通常是一个非常糟糕的主意。

为什么您的方法只是返回主帐户值?然后可以将其传递给需要它的其他东西。

如果你发现自己有很多静态成员 - 特别是如果其他类正在获取可变的静态变量 - 请考虑是否有更多的OO设计可以应用。它更容易理解,更容易测试,也更容易维护。

编辑:好的,现在你有:

public static class Common
{
    public static int PrimaryAccount;
    // other static fields

    public static void PrepareReportParameters(string reportParameters)
    {
        // Code to set the fields
    }
}

而不是使用普通类:

public class ReportParameters
{
    public int PrimaryAccount { get; private set; }
    // Other properties

    private ReportParameters(int primaryAccount, ....)
    {
        this.PrimaryAccount = primaryAccount;
    }

    // Could use a constructor instead, but I prefer methods when they're going to
    // do work
    public static ReportParameters Parse(string report)
    {
        // Parse the parameter, save values into local variables, then
        return new ReportParameters(primaryAccount, ...);
    }
}

然后从代码的其余部分调用它,并将ReportParameters引用传递给任何需要它的内容。

答案 1 :(得分:1)

您可以使用相关的强类型属性创建一个名为ReportParameters的类,并为Common提供一个静态实例吗?

答案 2 :(得分:0)

我不确定这是最好的设计。只有在调用PrepareReportParameters后才允许访问Common.PrimaryAccount,会有一定的“代码味道”。也许你会考虑一个实例类,传入构造函数中的参数?