2012-05-30 2 views
9

참고 : 이미 msdn을 확인했지만 실제 질문은 다루지 않습니다 (아래 참조)..NET 용 [Obsolete (string, bool)] 속성의 사용

내 클래스 중 하나에서 (분명히 쓸모없는) 생성자에서 쓸모없는 속성을 사용하려고합니다. 시나리오는 다음과 같습니다.

기존의 코드와 배포 된 코드에 영향을주지 않고 개발자가 새로운 생성자로 업데이트하도록 할 수 있기를 바랍니다. 이 방법을 사용하면 코드를 프로덕션에 배포 할 수 있지만 개발자의 관점에서 볼 때 코드에 들어갈 때마다 무시할 수있는 "경고"를 표시하는 대신 코드를 가져올 수 있습니다. 현상 유지가 더 이상 정상이 아니기 때문에 오류를 컴파일하십시오.

제 질문은 이것이 개발자 또는 모든 호출 앱에만 영향을 미칩니 까? 아니면 모든 것이 잘못 되었습니까?

샘플 코드 :

public class MyClass 
{ 
    private string _userID; //new code 

    [Obsolete("This constructor is obsolete, please use other constructor.", true)] 
    public MyClass() 
    { 
     _userID = ""; //defaulting to empty string for all those using this constructor 
    } 

    public MyClass(string userID) 
    { 
     _userID = userID; //this is why they need to use this constructor 
    } 
} 

모든 모든 도움을 이해할 수있을 것이다, 사전에 감사합니다!

+1

실제로는 좋은 질문입니다. 그러나 솔직히, 당신은 왜 그것을 단순히 시험해 보지 않으시겠습니까? 시험은 그렇게 어려운 것 같지 않습니다. 그래도 범죄는 없습니다. –

+0

나는 어셈블리 참조에 대해 컴파일하는 사람에게 영향을 줄 것이라고 믿는다. –

+0

내가 그것을 테스트하려고하지 않는 유일한 이유는 매우 시간을 위해 crunched하고 누군가가 이미 알고 있다면 나는 속임수를 알았지 :) – IWriteApps

답변

11

예, 이것은 주로 컴파일러에 영향을 미칩니다. 사전 빌드 된 코드는 영향을받지 않습니다. 코드가이 속성을 명시 적으로 검사하지 않는 한. 예를 들어, 일부 직렬화 코드 (XmlSerializer, IIRC)가이를 확인하므로 전체가 부작용이 없음 ... 이지만 기본으로 기존 코드는 다음에 컴파일하려고 시도 할 때까지 영향을받지 않습니다.

물론 동적 컴파일을 사용하는 무언가 (예 : ASP.NET 사전 컴파일없이)에서이 코드를 사용하는 경우 모든 베팅은이 아닙니다.

3

이 속성은 컴파일러에 대한 명령 일뿐입니다. 이미 존재하는 바이너리는 여전히 생성자를 사용할 수 있습니다.

2

So my question is, will this affect only developers, or all calling apps, or do I have the whole thing wrong?

이것은 컴파일시에만 컴파일러에서 사용됩니다. 이미 배포 된 응용 프로그램에는 영향을 미치지 않습니다.

이와 같이, 이것은 성취하려는 동작을합니다.

2

[Obsolete]가 이미 수행 한 작업이므로 별도의 도움이 필요하지 않습니다. 컴파일 시간 경고가 아니며 오류가 발생합니다.

error CS0619: 'ConsoleApplication1.MyClass.MyClass()' is obsolete: 'This constructor is obsolete, please use other constructor.'

+0

나는이 수업에서 알 수 있듯이 단순히 쓸모 없게하는 것이 사용자에게 경고. overloaded 속성을 사용하여 오류 표시를하면 오류가 표시됩니다. 기존 코드를 사용하여 사용자에게 영향을 미치지 않도록하고 싶습니다. – IWriteApps

+0

정확히 말하면 ObsoleteAttribute에 대한 두 번째 매개 변수가 true 인 경우에만 컴파일러에서 오류가 발생합니다. 그렇지 않으면 기본적으로 컴파일러는 경고를 내 보냅니다 (경고를 사용함과 동시에 컴파일하지 않는 한). –

+1

'bool error' 인수를 취하고'true'를 전달하는 생성자 오버로드를 사용할 때 경고가 아닙니다. 당신이하는 일은 바로 당신입니다. 기존 코드는 영향을받지 않으며 컴파일러 만 특성을 검사합니다. –