2017-01-05 12 views
5

클래스 메서드가 클래스의 상태에 의존하지 않으면 정적 메서드 일 수 있습니다. 이런 경우에 정적 메서드를 만드는 것이 좋든 나쁘 든 연습입니까?상태 비 저장 메소드를 정적으로 만드는 것이 좋은가, 나쁜가?

(C#을 태그로 그러나 아마 방법은 클래스의 구성원이어야합니다 많은 OO 언어에 적용됩니다.)

+0

페이징 @ 존스 스케 (Paging @JonSkeet)는 확실히 그의 종류의 질문처럼 보입니다. –

답변

4

의 Visual Studio 코드 분석 및 ReSharper에서이 작은 성능 이점이 있기 때문에, 그 방법은 정적 수 있도록하는 것이 좋습니다 : MSDN에서

: 인스턴스 데이터에 액세스하거나 (Visual Basic의 경우 Shared) 인스턴스 메소드가 정적으로 표시 할 수 있습니다 호출하지 않는

회원. 메서드를 정적으로 표시하면 컴파일러는 비 멤버 호출 사이트를 이러한 멤버에게 보냅니다. 비가 상 호출 사이트를 내보내는 것은 각 호출에 대해 런타임에 현재 객체 포인터가 null이 아닌지 확인하는 것을 방지합니다. 이는 성능에 민감한 코드에 대해 측정 가능한 성능 이득을 얻을 수 있습니다. 경우에 따라 현재 오브젝트 인스턴스에 액세스하지 못하면 정확성 문제가 발생합니다.

"성능에 민감하지 않은"코드가 아닌 경우 이는 취향의 문제입니다. 나는 그렇게하지 않을 이유가 없다면 개인적으로 ReSharper의 제안에 순종한다.

+0

MSDN에서 그런 세부 사항을 다룰 수 있다는 것을 알지 못했습니다. –

+1

@ Mr.Boy를 알면 정말 유용합니다. MSDN이 아니지만 VS 코드 분석 인 경우 MSDN은 왜 CA가 제안하는지 설명합니다. –

1

사례의 경우 정적 인 방법을 사용하는 것이 좋고 나쁜 습관입니까?

정직하게 말하면 100 % 이것이 좋은지 나쁜지는 말할 수 없습니다. 많은 사람들은 그것이 정적으로 만들어 질 수 있다면 그렇게하는 일반적인 규칙을 따른다. 상태에 대한 요구 사항이 없으며 기술적으로 (적어도 C#에서는) 조금 더 빠름을 보여줍니다.

말하자면,이 모든 것은 메소드 주위의 코드 구성과 애플리케이션이 어떻게 진화 할 것인지에 달려 있습니다.