0

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

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

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

如果你能帮我解决这个问题,我会很高兴的。感谢您的阅读。

4

1 回答 1

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
于 2013-06-27T09:14:02.830 回答