2014-07-08 4 views
0

C#에 샘플이 있는지 궁금합니다. 상업적인 의도보다는 상속을 금지하는 단일 샘플을 생각할 수 없으므로 C# 자체의 실제 사례를 알고 싶습니다..Net 자체에는 상속받을 수없는 클래스가 있습니까?

봉인 된 클래스에 대해 알고 있는데, 나는 C# 자체에서 값 유형과 암시 적으로 밀폐 된 구조체가 아닌 몇 가지 예제를 찾고 있습니다.

+2

"상업적 의도"에 대해서는 확실하지 않지만'sealed 클래스 '는 [Fragile Base Class] (http://en.wikipedia.org/wiki/Fragile_base_class) 문제를 방지합니다. 하루 하루의 예가 ['Thread'] (http://msdn.microsoft.com/en-us/library/system.threading.thread (v = vs.110) .aspx) 클래스입니다. 그것을 상속하고 행동을 바꾸고 싶지 않습니다. –

+0

아하, :) 이제는 말이 되네, 당신의 실례가 실제로 의미가 있습니다. 링크 : Thanks for the link :) – Breeze

+1

문제 없음 :) 전체 목록을 원한다면 .NET 참조 소스를 찾아 보거나 다운로드하여 다른 모든 사례를 검색 할 수 있습니다. http://referencesource.microsoft.com/ –

답변

3

당신은 어떤 구조체, sealed 클래스 또는 static 클래스에서 상속 할 수 없습니다 . C#에서는 DelegateEnum을 비롯한 여러 가지 '특수'유형을 사용하는 것을 금지합니다. 이러한 유형을 사용하기위한 다른 구성을 제공합니다.

가장 눈에 띄는 예는 System.String입니다.

이처럼 상속하려고한다면 :

public class CustomString : String { } 

당신이 오류가 나타납니다 :

'CustomString': cannot derive from sealed type 'string'

을 그리고 닷넷 프레임 워크 많은 다른 예는있다 . 리플렉션을 사용하여 빠른 비교를 수행했으며 mscorlib (v4.0) 만해도 856 개의 공개 유형이 있고 619 개의 비공개 공용 유형 (인터페이스 포함)과 비교됩니다.

+0

int 및 structa와 같은 값 유형 대신 다른 예제를 염두에 두시겠습니까? – Breeze

+0

'ListItem'은 [another]입니다. (http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listitem) – Kaf

+0

@Hossein 저는 하나의 예로서'string'이라는 이름을 붙였습니다. 수많은 사람들. –

4

예. sealed 인 모든 클래스는 기본 클래스로 사용할 수 없습니다.

sealed 클래스에 대한 자세한 내용은 here을 참조하십시오.

.NET에서 sealed 클래스의 몇 가지 예하면 다음과 같습니다

+0

! 클래스, 메신저 그냥 C# 자체에서 뭔가 예제보다는 loking 값 형식 및 strucs 암시 적으로 sealed 있습니다. 이름을 좀? – Breeze

+0

이미, 이미 지적한대로'System.String'은 이미 그 중 하나입니다. – Christos

+0

Thankyou verymuch :) – Breeze

1

sealed 클래스 외에도 static 클래스는 상속 될 수 없습니다 (about 참조). 예 : System.Linq.Enumerable.

public static class Inherited : System.Linq.Enumerable 
{ 
} 

이것은 제대로 작동하지 않습니다.

관련 문제