使用静态方法使用不同版本的类

时间:2013-06-27 08:42:17

标签: c# class static-methods

我使用了一些带有静态方法类的库。

namespace lib
{
    public class libClass
    {
        ...
        public static int num;
        public static void libMethod(int arg)
        {
            num = arg;
        }
    }
}

我需要在程序的两个不同位置(在不同的命名空间中)使用此类的两个实例。问题是这个实例应该彼此独立(libClass.num可以是不同的)。

如果你帮我处理这个问题,我会很高兴的。谢谢你的阅读。

1 个答案:

答案 0 :(得分:2)

目前还不清楚为什么你处于这种情况,即。你能做什么,不能做什么。

理想情况下,我只是创建一个类的实例,并避免整个问题,但我认为有一些理由你不能或不想这样做?

否则,解决这个问题的最简单和最简洁的方法可能是只创建该类的两个副本,并在每个命名空间中放置一个副本,每个副本都有自己的静态变量。 我强烈建议给这些课程不同的名字,只是为了清楚并避免以后混淆。

您的最终选择是寻找完全不同的解决方案。很难说,如果你不了解更多关于你的场景,但是如果你真的不能使用一个实例,那么num似乎根本不应该是这个类的责任。

显然,您希望在某些逻辑上下文/范围中存储和使用num;你应该问问自己在你的范围内你有哪些其他选择(除了那个类)(希望这不是太抽象^^)。

<强>更新

我明白你的意思了。我认为你应该能够覆盖这个类。尝试这样的事情:

    using VariousTesting;

    namespace VariousTesting
    {
    public class LibClass
        {        
            public static int num;
            public static void libMethod(int arg)
            {
                num = arg;
            }
        }
    }

    namespace VariousTesting2
    {
        public class SubLibClassA : LibClass
        {

            public static int num;
            public static void libMethod(int arg)
            {
                num = arg;
            }

            public static int GetNum()
            {
                return num;
            }
        }
    }

    namespace VariousTesting2
    {
        public class SubLibClassB : LibClass
        {
            public static int num;
            public static void libMethod(int arg)
            {
                num = arg;
            }

            public static int GetNum()
            {
                return num;
            }
        }
    }

您可以按如下方式测试:

        SubLibClassA.libMethod(1);
        Console.WriteLine(SubLibClassA.GetNum());  // 1

        SubLibClassB.libMethod(2);
        Console.WriteLine(SubLibClassB.GetNum());  // 2
        Console.WriteLine(SubLibClassA.GetNum()); // still 1! Yay! :D