클래스 메서드가 클래스의 상태에 의존하지 않으면 정적 메서드 일 수 있습니다. 이런 경우에 정적 메서드를 만드는 것이 좋든 나쁘 든 연습입니까?상태 비 저장 메소드를 정적으로 만드는 것이 좋은가, 나쁜가?
(C#을 태그로 그러나 아마 방법은 클래스의 구성원이어야합니다 많은 OO 언어에 적용됩니다.)
클래스 메서드가 클래스의 상태에 의존하지 않으면 정적 메서드 일 수 있습니다. 이런 경우에 정적 메서드를 만드는 것이 좋든 나쁘 든 연습입니까?상태 비 저장 메소드를 정적으로 만드는 것이 좋은가, 나쁜가?
(C#을 태그로 그러나 아마 방법은 클래스의 구성원이어야합니다 많은 OO 언어에 적용됩니다.)
의 Visual Studio 코드 분석 및 ReSharper에서이 작은 성능 이점이 있기 때문에, 그 방법은 정적 수 있도록하는 것이 좋습니다 : MSDN에서
: 인스턴스 데이터에 액세스하거나 (Visual Basic의 경우 Shared) 인스턴스 메소드가 정적으로 표시 할 수 있습니다 호출하지 않는
회원. 메서드를 정적으로 표시하면 컴파일러는 비 멤버 호출 사이트를 이러한 멤버에게 보냅니다. 비가 상 호출 사이트를 내보내는 것은 각 호출에 대해 런타임에 현재 객체 포인터가 null이 아닌지 확인하는 것을 방지합니다. 이는 성능에 민감한 코드에 대해 측정 가능한 성능 이득을 얻을 수 있습니다. 경우에 따라 현재 오브젝트 인스턴스에 액세스하지 못하면 정확성 문제가 발생합니다.
"성능에 민감하지 않은"코드가 아닌 경우 이는 취향의 문제입니다. 나는 그렇게하지 않을 이유가 없다면 개인적으로 ReSharper의 제안에 순종한다.
MSDN에서 그런 세부 사항을 다룰 수 있다는 것을 알지 못했습니다. –
@ Mr.Boy를 알면 정말 유용합니다. MSDN이 아니지만 VS 코드 분석 인 경우 MSDN은 왜 CA가 제안하는지 설명합니다. –
사례의 경우 정적 인 방법을 사용하는 것이 좋고 나쁜 습관입니까?
정직하게 말하면 100 % 이것이 좋은지 나쁜지는 말할 수 없습니다. 많은 사람들은 그것이 정적으로 만들어 질 수 있다면 그렇게하는 일반적인 규칙을 따른다. 상태에 대한 요구 사항이 없으며 기술적으로 (적어도 C#에서는) 조금 더 빠름을 보여줍니다.
말하자면,이 모든 것은 메소드 주위의 코드 구성과 애플리케이션이 어떻게 진화 할 것인지에 달려 있습니다.
페이징 @ 존스 스케 (Paging @JonSkeet)는 확실히 그의 종류의 질문처럼 보입니다. –