2009-10-06 4 views
2

반사경에서 색상 클래스의 소스를 탐색 중이며 그냥 봉인 된 클래스입니다. 그러나 모든 구성원은 정적입니다. 그렇다면 왜 Colors 클래스의 복사본을 만들까요?.NET Colors 클래스가 정적이 아닌 이유는 무엇입니까?

그것은 내부에있다 :

System.Windows.Media.Colors 
+0

회원은 사본을 인스턴스화 할 필요가 없도록 모든 정적 더욱 더 할 수없는 생성자는 기존의 방법을 통해 사용할 수 없습니다 때문입니다. – Jay

답변

8

정적 클래스입니다 (같이 어떤 접근성 수준에서 생성자, 심지어 것들에 의해 생성되지 개인 생성자없는 생성자와 단지 밀봉 추상적 클래스 컴파일러) [Eric의 의견에 따라 고정]. C# 키워드 static은 단순히 그 축약어이며 모든 구성원을 정적으로 만들도록 강요하지만 API 클라이언트의 경우 똑같습니다.

.NET 2.0이 출시되기 전에 WPF (Avalon) 작업이 시작된 것을 감안할 때 static class이 나타나기 전에이 특정 클래스가 작성된 것일 수 있습니다. 또는 저자가 그 언어 기능을 인식하지 못했을 수도 있습니다.

+4

첫 번째 단락이 올바르지 않습니다. 정적 클래스는 private 생성자가있는 sealed 클래스로 구현되지 않습니다. 오히려 정적 클래스는 생성자가없는 * sealed 클래스입니다. –

+0

고맙습니다. 고칠 것입니다. –

+2

필자가 아는 한, 정적 클래스는 필요한 경우 모든 정적 멤버를 초기화 할 수있는 개인 기본 생성자 (매개 변수 없음)를 가질 수 있으며 멤버 또는 유형 자체가 참조되기 전에 AppDomain마다 한 번 호출하도록 CLR이 보장합니다. –

2

제게는 Colors.AliceBlueColors.AntiqueWhite (Colors 클래스의 첫 번째 및 두 번째 정적 속성 :)은 다른 유형 대신 Color 객체의 차이 인스턴스 여야합니다.

public static Color AliceBlue {get;}

는 정적 클래스는 정적 멤버와 포함 된 봉인 클래스가 있습니다 에만 적어도 C#으로 (개인 기본 생성자를 가질 수로 새로운 키워드를 사용하여 인스턴스화 할 수 없습니다).

Color를 인수로 사용하는 API를 만들고 있다고 가정하면 Color가 정적 클래스 인 경우 어떻게됩니까?

다른 색상은 Color 클래스의 다른 인스턴스 대신 다른 유형 (틀림없이 정적 일 수도 있음)이어야한다고 주장 할 수 있습니다. 이 경우에도 Color 클래스는 정적 클래스가 아니어야합니다. 왜냐하면 개별 Color 클래스에 대한 기본 Color 클래스를 가져야하고 기본 Color 클래스 static이 자동으로이를 봉인하게 만들기 때문입니다.

Color는 네임 스페이스 여야하며 개별 색상은 정적 클래스 여야한다고 주장하기를 원할 수도 있습니다. 간단히 말해서 나는 다시

+0

그는'Color' 클래스 (이 또한 거기에 있으며 정적이 아닙니다)에 대해서 말하고 있지 않습니다. 그는'Red'와'Green'과 같은 멤버를 제공하기 위해서만 존재하는'Colors' 클래스에 대해 말하고 있습니다. 이것은 WPF에서 별도의 클래스입니다. –

+0

아 ... 알겠습니다. 귀하의 의견에 감사드립니다. 나는 원래의 질문을 그대로 취함으로써 혼란스러워했다. 이 경우 Colors는 정적 클래스 일 수 있다는 것에 동의합니다. –

+0

네, 죄송합니다. 이제 Colors 클래스를 편집하고 편집했습니다. –

1

을 :)처럼 모든 정적 회원들과 개인 생성자와 sealed 클래스 때문에 ILstatic 클래스의 사용을 형성하는 방식의 특정 성능 향상을 구성하기 때문에 API의 모양을 상상하도록 요청합니다 실제로 sealed 클래스에 비해 정적 클래스는 IL에서 abstract 수정자를 가져와 new가 호출되지 않도록합니다.

참조 .. This post on msdn social

관련 문제