문제

부분 클래스를 사용하여 두 파일 사이에서 일부 기능을 분할하고 있지만 오류가 발생합니다. 내가 뭘 잘못하고 있죠?

A1.CS :

private partial class A
{
    private string SomeProperty { get { return "SomeGeneratedString"; } }       
}

A2.CS :

private partial class A
{
    void SomeFunction()
    {
        //trying to access this.SomeProperty produces the following compiler error, at least with C# 2.0
        //error CS0117: 'A' does not contain a definition for 'SomeProperty'
    }
}
도움이 되었습니까?

해결책

두 부분 클래스가 동일한 네임 스페이스에 있습니까? 그것은 설명 일 수 있습니다.

다른 팁

@andrey k와 동일한 대답이지만 간단한 용어

각 파일의 '속성'창을 사용하여 모든 부분 클래스의 빌드 작업을 '컴파일'하도록 설정하십시오.

Properties window - loading= Build action property">

다른 네임 스페이스?

처음에는 오류를 재현 할 수 없었습니다.

이러한 부분 클래스가 단독으로 정의되면 네임 스페이스 내부에서 개인 키워드는 "네임 스페이스에 정의 된 요소로 빌드가 실패하게됩니다.

내가 비공개로 유지하고 다른 클래스 내에서 둥지를 틀면 모든 것이 잘 작동합니다.

한 파일에서 다른 클래스 내부에 중첩 된 클래스의 일부가 있고 다른 파일에서는 클래스에 중첩되지 않은 다음 개인 키워드를 제거 할 때만 오류를 재현 할 수 있습니다.

class1.cs :

namespace stackoverflow.answers
{
    public class Foo
    {
        private partial class Bar
        {
            private string SomeProperty { get { return "SomeGeneratedString"; } }
        }
    }
}

class2.cs :

namespace stackoverflow.answers
{
    partial class Bar
    {
        void SomeFunction()
        {
            string bar = this.SomeProperty;
        }
    }    
}

또한 네임 스페이스가 다른 경우 설명한 오류가 발생합니다.

제공된 코드는 유효하지 않은 C# 구문이며 더 많은 컨텍스트 없이는 살펴볼 수 없으므로 솔루션에 대한 전체 코드를 게시하십시오.

편집하다:

솔루션 : 조치 구축 -> 충돌, 기타 아무것도 없습니다.

더 구체적으로 시도하겠습니다.

3 개의 다른 파일에서 3 개의 부분 클래스 중 수업을 공유했습니다. 한 순간에 (한 부분에서 다른 부분에서 선언 된 함수의 한 부분에서) 오류가 "현재 컨텍스트에 존재하지 않는다"는 오류를 나타 내기 시작했다. 어떤 남자까지 오래 걸렸습니다 도움이되었습니다 우연히 파일의 빌드 동작을 한 부분으로 "Compile"대신 "EmbeddedResourse"로 설정했습니다.

빌드 작업을 전환하려면 Solution Explorer에서 파일을 마우스 오른쪽 버튼으로 클릭 한 다음 속성을 선택해야합니다. 그런 다음 빌드 동작을 변경하십시오.

이 질문은 오래되었고,이 경우 내 대답은 정확히 도움이되지 않습니다. 그러나 부분 클래스와 관련된 다른 매우 드문 경우에서 도움이 될 수 있습니다. 내 영어가 명확하지 않으면 죄송합니다.

수업을 "개인"이라고 선언하기 때문이라고 생각합니다. 클래스의 두 "반쪽"이 동일한 어셈블리 내에서 서로를 "볼"수 있도록 수정자를 "내부"로 변경하십시오.

내가 얻는 오류는 다음과 같습니다.

네임 스페이스에 정의 된 요소는 개인, 보호 또는 보호 된 내부로 명시 적으로 선언 할 수 없습니다.

앞에서 언급 한 바와 같이 네임 스페이스 문제라고 생각합니다.

모든 파일은 동일한 폴더에 있어야합니다.

나는 당신의 코드를 분석합니다. 당신은 부분 클래스를 중첩 클래스로 선언했습니다. 이것은 오류를 표시하는 원인입니다. BCZ 부분 클래스가 중첩 클래스로 선언하지 않는 이유 Parial 키워드는 Ultiple 파일로 분할되므로 모든 파일 NAE는 중첩 클래스에서 선언 할 때 동일합니다.

추가 도움이 시간을 절약 할 수있는 코너 케이스는 부분 클래스를 사용하여 런타임 텍스트 템플릿의 생성 클래스를 보완하는 경우입니다.

문제는 실제로 부분 클래스의 네임 스페이스가 해당 클래스의 생성 된 부분의 네임 스페이스와 다를 수 있습니다. 이를 확인하려면 생성 된 코드를보십시오.

이 문제를 해결하려면 편집해야합니다 .csproj 프로젝트 파일과 해당 템플릿에 대한 섹션에서 <ClassNamespace> 꼬리표:

<Content Include="MyTemplate.tt">
  <Generator>TextTemplatingFilePreprocessor</Generator>
  <ClassNamespace>My.Namespace</ClassNamespace>
  <LastGenOutput>MyTemplate.cs</LastGenOutput>
</Content>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top