2014-12-10 2 views
1

내가 누락 된 단순한 것이 있어야합니다. 두 개의 다른 클래스에서 두 개의 다른 어셈블리에 있고 다른 부분 클래스에서 한 부분 클래스의 개인 정적 메서드를 참조 할 수 없습니다. 그러나나머지 절반의 부분 클래스 중 절반에서 개인 정적 메서드에 액세스 할 수없는 이유는 무엇입니까?

namespace FirstHalf 
{ 
    public partial class TestPartialClass 
    { 
     public static void Main(string[] args) 
     { 
      Console.WriteLine(PrintFoo()); 
     } 
    } 
} 

다음 들의 하반기 어셈블리에서, 나는 다음과 같은 클래스가, 그리고

namespace FirstHalf 
{ 
    public partial class TestPartialClass 
    { 
     private static void PrintFoo() 
     { 
      Console.WriteLine("Foo"); 
     } 
    } 
} 

:

는 예를 들어, FirstHalf 어셈블리에서, 나는 다음과 같은 클래스가 , SecondHalf 어셈블리에서 PrintFoo()을 호출하려고하면 다음 오류가 발생합니다.

CS0103: The name 'PrintFoo' does not exist in the current context.

여기에 무슨 일이 있습니까? SecondHalf에서 FirstHalf에 대한 참조가 있으므로 Visual Studio는이 둘 사이에 종속성이 있음을 알고 있습니다.

+3

두 어셈블리간에 부분 클래스를 분할 할 수 없습니다. 그들은 실제로 두 개의 다른 클래스로 컴파일됩니다. –

+1

@DanBryant 오, 알겠습니다. 그걸 올바른 것으로 표시 할 수 있도록 대답을해야합니다. – quanticle

+0

당신이 물어 보는 것과 관련이 없지만'WriteLine'의 인자로'void' 타입의 표현식을 전달할 수는 없습니다. –

답변

1

두 어셈블리간에 부분 클래스를 분할 할 수 없습니다. 그들은 실제로 두 개의 다른 클래스로 컴파일됩니다.

당신이 정말로 '개인'멤버의 공유와,이 전역 어셈블리 같은 작업을 수행하려는 경우, 당신은 기본 클래스를 생성하고이를 상속하여 비슷한 얻을 수 있습니다 :

말했다
namespace FirstHalf 
{ 
    public class Base 
    { 
     protected static void PrintFoo() 
     { 
      Console.WriteLine("Foo"); 
     } 
    } 
} 

namespace SecondHalf 
{ 
    public class Derived : FirstHalf.Base 
    { 
     public static void Main(string[] args) 
     { 
      PrintFoo(); 
     } 
    } 
} 

가있다 아마도 어떤 형태의 작곡을 사용하여 당신이하려는 것을 달성하기위한 더 깨끗한 방법 일 것입니다; 세부 사항은 특정 응용 프로그램에 따라 다릅니다.

+0

불행히도, 나를위한 실제 사용 사례는 일부 라이브러리 제한을 해결하기위한 시도입니다. 내가하려는 일을하는 또 다른 방법을 찾아 낼거야. – quanticle

+0

반사를 사용하여 '개인'벽을 해킹 할 수 있습니다. – pm100

+0

@quanticle이 질문과 같은 소리는 [XY 문제] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)입니다. , 당신은 당신이 사용하고있는 라이브러리와 실행중인 제한 사항에 대해 질문하고 *** 문제에 대한 해결책 ***을 묻는 대신에 *** 문제에 대해 물어보아야합니다. *** 여기에서했던 것처럼 말입니다. . –

관련 문제