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

C# 使用静态方法使用不同版本的类,c#,class,static-methods,C#,Class,Static Methods,我使用了一些带有静态方法类的库 namespace lib { public class libClass { ... public static int num; public static void libMethod(int arg) { num = arg; } } } 我需要在程序的两个不同位置(在不同的名称空间中)使用这个类的两个实例。问题是这些实例应该彼

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

namespace lib
{
    public class libClass
    {
        ...
        public static int num;
        public static void libMethod(int arg)
        {
            num = arg;
        }
    }
}
我需要在程序的两个不同位置(在不同的名称空间中)使用这个类的两个实例。问题是这些实例应该彼此独立(libClass.num可以不同)


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

不太清楚你为什么会处于这种情况,即你能做什么和不能做什么

理想情况下,我只需要创建一个类的实例,并避免整个问题,但我假设有一些原因您不能或不想这样做

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

你最后的选择是寻找一个完全不同的解决方案。如果不了解更多场景,很难说,但是如果您真的不能使用实例,那么
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

你的问题不清楚。你到底有什么问题?你想实现什么?您希望从两个不同的名称空间调用'libClass.libMethod'?我认为他担心如果他引用
libClass.num
,它将在两个名称空间中保持相同的值@百夫长:我的假设正确吗?@友好的,是的,就是这样。从技术上讲,这可以通过创建另一个AppDomain来实现。从这个问题上看,这是否是一个可行的解决方案是完全没有意义的。谢谢你的回答!我不能创建类的副本,因为我只有dll,没有它的源代码(这就是为什么我不能更改类的结构)。我没有得到创建实例的解决方案-libClass.num是静态的,对于所有实例都是一样的。这几乎就是我需要的!但是还有另一个问题,正如我所说的,我没有libMethod的代码,我只知道它会以某种方式改变
num
。在这种情况下它会被覆盖吗?@centuri0n:您可以使用反编译第三方DLL,查看它如何使用
num
变量。但是,您应该仍然能够创建一个新类,并通过继承它来覆盖
num
,就像Kjartan的示例
public class SubLibClassA:LibClass