2016-11-01 2 views
1

[Obsolete]의 기능은 본질적으로 클래스/기능을 사용하지 못하도록하지만 코드를 레코드의 코드로 유지하는 것입니다.언제 [Obsolete] 속성을 사용해야하며 코드를 삭제해야합니까?

[Obsolete]을 삭제하거나 코드를 주석 처리하는 것과 반대되는 이유가 있습니까? 이 질문은 소스 제어가있는 경우 더욱 관련이 있으므로 SC에서와 같이 참조 목적으로 코드를 유지하는 것이 중요하지 않습니다.

모범 사례로 간주되는 것에 대해 궁금한 점이 있습니까?

+3

코드를 더 이상 사용하지 않는 것으로 표시하면 API를 더 많이 사용하게됩니다. 그것은 쓸모없는 코드가 실제로 제거되기 전에 그들에게 반응하여 현재의 방법이 무엇이든간에 변화 할 수있는 기회를 제공합니다. 외부 사용자가 아닌 내부 사용을위한 것이라면 더 이상 사용되지 않는 이유는 없습니다. –

+0

more @http : //stackoverflow.com/questions/3510892/usage-of-the-obsolete-attribute –

+1

@GlorinOakenfoot 이유가 있습니다. 어쩌면 당신은 의존성을 가진 하나 이상의 프로젝트를 가지고 있습니다. 예 : 라이브러리 A는 라이브러리를 사용합니다. B. 이제는 A의 모든 코드를 변경하지 말고 나중에 표시하기 위해 표시 만하고 싶지 않을 수 있습니다. 예 : 200 개 장소의 다른 도서관에서 사용되는 방법이 있습니다. 한 번에 모든 것을 고치지 않으려 고합니다. (오래 된 코드가 여전히 올바른 한). 더 나은 해결책은 기존의 메소드를 변경하여 새로운 코드를 호출하는 것입니다. –

답변

2

은 이전 버전과의 호환성을 위해 주로 사용된다, 그래서 당신은 다른 예상되는 동작을 가진 기능의 새로운 구현을 수행 할 때, 기존의 기능을 사용하는 코드는 여전히 작동하지만 새로운 것을 확인 라이브러리를 사용하면 새로운 구현이 사용됩니다.

타사에서 사용중인 라이브러리를 유지 관리하는 경우 오래된 기능을 제거 할 때 도로지도를 개발해야합니다. 중요한 경우, 여러 번 당신은 그 기능이 더 이상 유지 보수되지 않고 새 기능이 대신 사용되어야 함을 나타 내기 때문입니다.

내부적으로는 리팩토러에서 제대로 구현되지 않은 기능을 점진적으로 대체 할 수 있습니다. 더 이상 사용하지 않을 때까지 경고를 통해 작업을 시작한 다음 안전하게 제거 할 수 있습니다.

이것은 기존 코드 기반을 갱신 한 경험을 바탕으로 한 의견이며 공통적 인 합의가 없음을 유의하십시오.

+0

당신은 사소한 편집이 아니기 때문에 "사용자"가 "사용"하지 않는 약간의 오타가있다. 허용. – fahadash

+0

@ fahadash, 저는 도서관의 새로운 용도에 대해 이야기하고 있습니다. 사용의 행동에서와 마찬가지로. – JCabello

-2

ObsoleteAttribute에 대한 문서는 사용되지는 요소는 제품의 향후 버전에서 제거 될 것이라는 점을 사용자에게 알리는 등의 요소를 표시 ...

이 상당히 잘 존재 이유의 설명합니다.

의견에서 언급했듯이 다른 사용자가 어셈블리 버전을 사용하는 경우에만 분명히 유용합니다.

1

Obsolete 속성은 프로그램 엔티티를 더 이상 사용하지 않는 것으로 표시합니다. 폐기 된 것으로 표시된 엔티티를 사용할 때마다 속성 구성 방법에 따라 경고 또는 오류가 생성됩니다.

여기서 참조 소스의 Hashtable 비교 자에 대한 예제입니다.

[Obsolete("Please use KeyComparer properties.")]   
    protected IComparer comparer 
    { 
     get 
     { 
      if(_keycomparer is CompatibleComparer) { 
       return ((CompatibleComparer)_keycomparer).Comparer; 
      }  
      else if(_keycomparer == null) { 
       return null; 
      }        
      else { 
       throw new ArgumentException(Environment.GetResourceString("Arg_CannotMixComparisonInfrastructure")); 
      }     
     } 
     set 
     { 
      if (_keycomparer is CompatibleComparer) { 
       CompatibleComparer keyComparer = (CompatibleComparer)_keycomparer; 
       _keycomparer = new CompatibleComparer(value, keyComparer.HashCodeProvider); 
      } 
      else if(_keycomparer == null) { 
       _keycomparer = new CompatibleComparer(value, (IHashCodeProvider)null);    
      }     
      else { 
       throw new ArgumentException(Environment.GetResourceString("Arg_CannotMixComparisonInfrastructure")); 
      } 
     } 
    } 
+0

프로그램 엔티티?컴파일러 경고를 생성하지 않습니다. 오류가 아닙니다. –

+0

ObsoleteAttribute (String, true)를 정의하면 오류가 발생합니다. – mybirthname

+0

@MatthiasBurger이 속성은 사용법에 경고 또는 오류가 발생하는지 여부를 나타내는 매개 변수를 허용합니다. 그것을 테스트하십시오. (또는 단지 그 문서를 보아라) – Servy

관련 문제