是否在所有实例之间共享静态变量?

Mar*_*tin 7 .net c# c#-4.0

在公共类中,我有一个私有静态字典.由于Dictionary是静态的,它是否意味着它在同一个对象的所有其他实例中共享(参见下面的示例).

public class Tax
{
    private static Dictionary<string, double> TaxBrakets = new Dictionary<string, double>(StringComparer.OrdinalIgnoreCase)
    {
        { "Individual",   0.18 },
        { "Business",     0.20 },
        { "Other",        0.22 },
    };

    public string Type { get; set; }
    public double ComputeTax(string type, double d)
    {
        return d * TaxBrakets[this.Type];
    }
}
Run Code Online (Sandbox Code Playgroud)

以这种方式使用Dictionary(作为静态变量)是否可以接受?

rec*_*ive 8

您的静态变量TaxBrakets与实例无关.this.TaxBrakets不会编译.所有出现的TaxBrakets都将引用相同的字典.通常,使用静态字典是完全可以接受的.这个特殊的用法看起来有点滑稽,但我需要看到更多的代码来暗示任何变化.


Ben*_*igt 6

是的,一个静态变量在整个程序中只存在一次,我认为它会按照你期望的方式运行.

这是否是您的会计问题的正确解决方案是有争议的,IANAA,但我的理解是税收括号(注意:"括号"的正确拼写有a c)将收入水平等同于边际税率,知道实体的类型不是本身足以确定税率.

  • 每个'AppDomain`只存在一次是准确的. (4认同)

Luk*_*keH 6

是的,所有实例都将共享该静态成员.(Visual Basic实际上通过使用Shared静态成员的关键字而不是static.)来明确这一点.)

这是完全可以接受的使用字典以这种方式,有一点需要注意:如果你的代码是多线程的,那么你必须确保访问静态成员是线程安全的.(当然,这适用于可能同时访问的任何成员,而不仅仅是静态.)

与问题没有直接关系,但您应该使用decimal而不是double与货币价值或财务计算相关的任何内容.