2017-04-26 6 views
2

나는 최근에 System.Versionclass을 사용 해왔다. 왜 그 클래스와 다른 유사한 클래스들도 Sealed (VB에서는 NotInheritable)으로 표시되어 있는지 궁금해했다.CLR의 일부 클래스가 봉인 된 이유는 무엇입니까?

좀 더 복잡한 클래스와는 달리 나는 그러한 클래스가 봉인 됨으로써 얻을 수있는 것을 보지 못합니다.

source에 관해서는 Version에 대해 아무런 의미가 없습니다.

게시/공식 (의견을 기반으로하지 않음) 이유가 있습니까? 거기에서 파생 됨으로 인해 발생할 수있는 문제가 있습니까? 특히 Version의 경우 또는 비슷한 간단한 클래스에 대해서는 실패한 경우

배경 : MS 버전이 ReadOnly 속성을 가지고 있으므로 양방향 바인딩에서 사용하기 쉽도록 Version 클래스를 다시 만들어야했습니다. 유도하는 DateTime 유사한 "값"을 나타내는 클래스, 일부 문제

+1

그 대답은 충분히 http://stackoverflow.com/a/7777674/920557겠습니까 구현? [2] 부분을 참조하십시오. –

+0

@EugeneKomisarenko 감사합니다. Part 1은 * application * 프로그래머가 (CLR 프로그래머와는 반대로) 클래스를 봉인 할 수있는 이유에 대해 분명합니다. 2 부에서는 논리적으로 들리지만 heresay를 기반으로하는 정보를 제공하며 MS 기본 수업을 통해 업무를 수행하는 데 필요한 정보를 제공하고이를 복제하도록 강요하지 않습니다. 가능하다면 좀 더 구체적인 소스/이유를 선호합니다. – Toby

+0

나는 상속을 디자인하거나 그것을 금지한다고 믿는다. 상속을위한 설계는 약간의 작업이 필요하며 일반적으로 구현을 더 제한 할 것입니다. 이를 염두에두고 클래스는 봉인되거나 상속받을 수 있도록 디자인되어야합니다. 당신이 제어 할 수없는 기본 클래스의 구현을 가지고 있다면 어떨까요? 밀폐 된 클래스는 제어 할 수없고 상속되지 않는 기본 클래스 문제를 방지합니다. – Codexer

답변

1

Version에게 원인이 있지만, 편안하게 struct에 맞게 너무 큰 것, 그것은 class의 것하지만 내가 알아야 할 것입니다. 그러나 동일한 설계 원칙이 적용됩니다. 값을 나타내는 유형은 변경 가능하고 봉인되어야합니다 (값 유형은 항상 봉인 됨).

또한 명확 값의 다른 특징을 볼 수

  • object.Equalsobject.GetHashCode를 오버라이드 (override)되어있다.
  • IEquatable<Version>
+0

구조체가 "너무 큽니다"일 때 규칙 또는 경험 법칙이 있습니까? C 배경에서오고 * 일반적으로 필드에 대한 전적으로 내 structs 유지; 그들이 기능을 필요로한다면 그것은 클래스입니다. – Toby

+2

@Toby, 일반 지침은 [클래스 및 구조체 선택] (https://msdn.microsoft.com/en-us/library/ms229017(v=vs.110) .aspx)을 참조하십시오. – TnTinMn

+0

내 미래의 참조를 위해,이 특정 상황에서 내 "BetterVersion"클래스는 실제로 CLR'Version' 클래스를 상속하지 않고 ("is-a"관계) 관계) 또는 그것을 재생산. – Toby