2013-06-27 2 views
0

정적 메서드가있는 클래스가있는 라이브러리를 사용합니다.정적 메서드를 사용하는 클래스의 다른 버전 사용

내 프로그램의 서로 다른 두 위치 (다른 네임 스페이스에 있음)에서이 클래스의 인스턴스 두 개를 사용해야합니다. 문제는이 인스턴스가 서로 독립적이어야한다는 것입니다 (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

답변 해 주셔서 감사합니다. 나는 DLL을 가지고 있고 소스 코드가 없기 때문에 클래스의 복사본을 만들 수 없다. 그래서 클래스의 구조를 변경할 수 없다. 인스턴스를 만들 때 솔루션을 얻지 못했습니다. libClass.num은 정적이며 모든 인스턴스에서 동일합니다. – centuri0n

+0

내 대답은 내 대답을 참조하십시오. – Kjartan

+0

거의 필요한 것입니다! 그러나 또 다른 문제가 있습니다. 제가 말했듯이,'libMethod'의 코드를 작성하지 않았기 때문에, 어떻게해서든지 num을 변경한다는 것이 유일한 것입니다. 이 경우 무시할 수 있습니까? centuri0n @ – centuri0n

관련 문제