2013-10-13 1 views
0

내 C# 컴파일러가 손상되었는지 또는 자동 속성의 작동 방식을 이해하지 못하는지 확인하기 위해 온 전성 검사가 필요합니다.C# 인스턴스 생성자에서 자동 속성을 초기화하지 못했습니다.

다음 클래스 정의 및 생성자가 주어지면 각 구성원 값을 기록하십시오.

public class MyClass 
{ 
    public string MyString { get; set; } 
    public string _anotherString; 

    public MyClass() 
    { 
     MyString = "some value"; 
     // <--- debugger shows MyString as null 

     _anotherString = "another value"; 
     // <--- debugger shows _anotherString as "another value" 
    } 
} 

이것은 다양한 클래스에서 계속 발생합니다. 즉, 생성자에서 값을 할당 할 때 모든 자동 속성이 초기화되지 않습니다. 그들은 다른 곳에서도 일합니다. 그러나 백업 저장소를 사용하도록 백업 변수를 변경하고 백업 변수를 초기화하면 올바르게 초기화됩니다.

생성자에서 자동 속성을 초기화하는 것이 항상 안전하다고 가정합니다. 그렇지 않으면 무엇인가 놓치고 있습니까? 그리고 그렇다면 Visual Studio에서 어떤 일이 벌어 질 수 있습니까?

+2

'* MyString = ...'또는 다음 줄에서 * 처음 * 휴식합니까? 귀하의 의견에 다음 줄에 있지만, 당신은 코멘트에 중단 점을 가질 수 없습니다 제안합니다. – BartoszKP

+2

디버거를 사용하지 않고 출력을 표시 할 수 있습니까? 예를 들어'Console.WriteLine' 또는'MessageBox.Show (...)'등등입니다. 자동 속성은 사용자가 설명하는 방식으로 동작하지 않습니다. –

+0

'Console.WriteLine()'으로 확인하십시오. 디버거에 잘못된 디버거가 표시되는 버그가 있다고 생각합니다. – siride

답변

0

새로운 새로운 프로젝트를 사용해 보았습니까? 솔루션을 지우고 (빌드> 솔루션 정리), 열려있는 모든 문서/탭을 닫은 다음 다시 작성 (빌드, 다시 작성하지 않음) 한 다음 다시 시도하십시오.

-2

이것은 두 개의 PostSharp 애트리뷰트 속성 사이의 충돌로 인한 것임을 확인했습니다. PostSharp에는 문제가되지 않지만 속성 할당을 가로 채기 위해 만든 사용자 지정 특성이 있습니다. 추가 속성을 제거하면 정상적으로 작동 할 수있었습니다.

기본적으로 동일한 객체에 적용된 여러 측면이있을 때 생성 된 코드를 "짜는"경우 PostSharp는 까다로운 작업을 수행합니다. 아직도 그것을 고치는 방법을 결정하려고 노력하지만, 적어도 나는 완전히 미쳐 가지 않을 것입니다.

+3

속성 할당에 대한 포스트 샤프 (PostSharp) 애스펙트 속성이 있다고 가정 할 때, 귀하의 질문에 그렇습니다. –

+0

@ JohnSaunders - C# 언어와 자동 속성이 작동하는 방식에 대한 명확한 설명이 필요함을 "구문 검토"라는 문구로 충분하다고 생각했습니다. 빠른 답변은 실제로 내 이해를 확인하는 데 도움이되었고, 문제의 근원을 찾기 위해 더 깊이 파고 들었습니다. 문제의 근원을 별도의 어셈블리에 묻었습니다. 나의 겸허 한 의견에서, 너 자신 같이 전문가의 네트워크에 연결의 가치는 것 다만 사정이 이해되지 않을 때 이들 같이 질문을 할 수 있습니다. –

+0

이 특별한 "전문가"는 PostSharp가 관련되었다고 말하면서 내 시간을 낭비한다고 생각합니다. PostSharp를 사용하고 있다는 사실은 C# 언어에 관한 것에서부터 여러분이 스스로 만든 임의의 언어에 관한 것으로 바뀌 었습니다. –