C#에서 정적 클래스를 표시하는 목적은 무엇입니까?C#에서는 정적 클래스를 표시하는 목적은 무엇입니까?
정적 메서드 만있는 클래스가 있으면 클래스를 정적으로 표시하거나 표시하지 않을 수 있습니다. 클래스를 정적으로 표시하려는 이유는 무엇입니까? 모든 메소드가 정적이라면 클래스를 정적으로 표시하고, 비 정적 메소드를 추가하지 않을 계획입니까?
나는 비슷한 문제를 둘러 보았지만 이와 비슷한 것은 없었습니다.
C#에서 정적 클래스를 표시하는 목적은 무엇입니까?C#에서는 정적 클래스를 표시하는 목적은 무엇입니까?
정적 메서드 만있는 클래스가 있으면 클래스를 정적으로 표시하거나 표시하지 않을 수 있습니다. 클래스를 정적으로 표시하려는 이유는 무엇입니까? 모든 메소드가 정적이라면 클래스를 정적으로 표시하고, 비 정적 메소드를 추가하지 않을 계획입니까?
나는 비슷한 문제를 둘러 보았지만 이와 비슷한 것은 없었습니다.
클래스를 정적으로 표시하는 것은이 유형이 정적 및 const 멤버 만 갖도록하려는 선언문입니다. 이것은 컴파일러에 의해 시행되며 실수로 인스턴스 메소드를 유형에 추가하는 것을 방지합니다.
다른 장점
또한 소비자가 클래스의 인스턴스를 만들지 못하게합니다. 정적 클래스가 도입되기 전에이를 강제하기 위해 private 인자없는 생성자를 생성해야했습니다. –
@Joel, thanks with this – JaredPar
덧붙여서 클래스를 정적으로 만들면 제네릭 클래스, 구조체, 인터페이스, 위임 또는 메서드에서 제네릭 형식 인수로 해당 형식을 사용할 수 없습니다. (generic 형식 인수와 같은 형식으로 무엇을 할 것인가? 만들 수는 없으므로 해당 형식의 변수는 null이 아닙니다. 형식 매개 변수를 통해 정적 메서드를 호출 할 수 없습니다. 전혀 쓸모가 없어서 우리는 그것을 허용하지 않습니다.) –
확장 메서드를 작성하려면 정적 클래스를 사용해야합니다. 그렇지 않으면 클래스가 인스턴스 데이터를 전혀 가지지 않을 것임을 보여줍니다.
클래스에 정적으로 표시하려면 정적 메서드 (일반적인 도우미 클래스) 만 포함하도록합니다. 인스턴스 메소드를 넣으면 컴파일러가 불평 할 것입니다. 버전 1의 .NET 프레임 워크에는 클래스가 있었지만 정적 메서드 만 함께 제공되는 것을 기억하지 않았습니다. 우연히 그러한 메소드 중 하나가 정적 수정자를 얻지 못했습니다. 이 기능은 버그가 배송 후 매우 늦게 발견 된 당시 존재하지 않았기 때문에. 그들은 생성자를 비공개로 만들었으므로 메서드를 사용할 수 없었습니다.
C# 언어에 고유 한 규칙이므로 CLR에는 정적 클래스 개념이 없습니다. 실수로 클래스의 인스턴스 멤버를 추가 할 수 없으며 클래스를 상속 할 수 없으며 클라이언트 코드가 우연히 클래스의 인스턴스를 만들 수 없습니다. 클래스의 기본 TypeAttributes는 Abstract 및 Sealed입니다. Abstract는 새로운 연산자가 작동하지 못하도록 보장합니다. Sealed는 클래스에서 상속받을 수 없도록합니다.
또한 확장 메서드는 정적 클래스의 정적 멤버 여야합니다. VB.NET은 다르게, [Extension] 속성을 필요로합니다.
코드에서 정적 클래스를 사용하는 것은 필요하지 않지만 유용합니다. 계약 내용이 매우 이해하기 쉽기 때문에 코드를 더 쉽게 이해할 수 있습니다. 그러나 OOP 코드 대신 절차 코드를 작성하는 수단으로 사용하지 않도록주의하십시오.
구현 세부 정보 및 절차 코드 작성 과용에 대한 언급은 +1입니다. – si618
클래스를 static
으로 표시하면 두 가지 중요한 이점이 있습니다.
컴파일러는 static
구성원을 클래스에 넣어야 만한다는 것을 확인합니다.
이 클래스는 static
멤버의 컨테이너 일뿐입니다.
이 기능은 NDP v1.0의 버그 (a un-callable non-static
member was included in the System.Environment
class)에 대한 응답으로 고안되었습니다.
다음과 같은 : 나는 모든 필드가'readonly '로 표시되고'readonly'라고 표시된 타입이어야한다는 형식의 비슷한'readonly' 수정자를 원했습니다. 이에 따라 NDP에 주석을 달아야하는데, 특히 원시적 인 유형이다. 불행하게도 변경 가능한 관용구로 작성된 코드가 많습니다 (예 :'List
http://stackoverflow.com/questions/576853/what-is-the-use-of-a-static-class http://stackoverflow.com/questions/241339/when-to-use-static- classes-in-c –
@ dboarman 자신 만의 질문을하십시오! – Cheeso
걱정하지 마시고, 당신의 질문을 오염시키고 싶지는 않을 것입니다. 누군가 정적 멤버의 스레드 안전성에 대해 언급 할 수 있다고 생각했습니다. ;) – IAbstract