2013-06-27 31 views
0

我用一些静态方法使用类的库。用静态方法使用不同版本的类

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

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

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

+0

你的问题不明确。你的问题到底是什么? –

+0

你想实现什么?你想从两个不同的命名空间调用'libClass.libMethod'? – Sander

+0

我认为他担心如果他引用'libClass.num',它将在两个名称空间中保持相同的值。 @ Centuri0n:我在这个假设中正确吗? – Amicable

回答

2

这是不是很清楚你为什么在这种情况下,即。你可以做什么,不可以做什么。

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

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

您的最终选择是寻找完全不同的解决方案。很难说,如果不知道更多关于你的情况,但如果你真的不能使用一个实例,那么看起来好像num应该也许不是这个类的责任。

很明显,你想在某些逻辑上下文/作用域中存储和使用num;你应该问自己,你有什么其他的选择(除了那个班级)在你的范围内做这件事(希望这不是太抽象^^)。

UPDATE:

我明白你的意思了。我认为你应该可以重写这个类。尝试是这样的:

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 
+0

谢谢你的回答!我无法创建该类的副本,因为我只是使用它,并没有它的源代码(这就是为什么我不能更改类的结构)。我没有得到创建实例的解决方案 - libClass.num是静态的,并且对于所有实例都是一样的。 – centuri0n

+0

我明白了..查看我更新的答案。 – Kjartan

+0

这几乎是我所需要的!但是还有一个问题,正如我所说的,我没有编写'libMethod'的代码,我唯一知道的就是改变'num'。在这种情况下可以重写吗? – centuri0n

相关问题