2011-01-15 4 views
6

개인 대 개인 정적 :어느 쪽이 더 낫습니까? 이 코드 샘플

public class SuperMan { 
    private static bool IsProper(decimal x) { 
     return x > 31.0m && x < 45.0m; 
    } 

    public bool CheckStuff(string a, string b, string c) { 
     // lots of code, some of which introduces a variable x 
     return IsProper(x) && /* other conditions */; 
    } 
} 

한다 IsProper (...)은 '비공개 정적 "또는"개인 "일.

  1. IsProper (..)는 인스턴스 상태에 액세스 할 필요가 없습니다
  2. 우리는 두 가지 옵션 사이에 다른 성능 (우리가 안 것들 중 하나에 대해 우려하지 않습니다 (심지어 미래에.) : 가정 실제 측정하지 않고 성능에 대해 추측 할 필요없이 최적화하면된다.)는 슈퍼맨 클래스 나 그 구성원들과 아무것도 할 필요가 보이지 않기 때문에
+3

는'IsProper'의 향후 버전은 인스턴스 상태에 액세스 할 수 있음 정적 그것을 만들 것? – CodesInChaos

+0

아니요 ... 나는 그 질문을 명확하게 편집 할 것입니다. – kidoman

답변

4

그것은 , 정적이 될 수 있습니다. 그러나 그 기능이 그 클래스에 속하는지 전혀 묻지 말아야합니다.

수퍼맨이에 대해 십진수가 적절한 십진수 인지 확인하는 경우 그곳에 속합니다. 그러나 나는 그걸 정적으로 만들지 않을 것이다. 나중에 상수 값을 SuperMan 속성으로 대체해야 할 가능성이 있습니다.

+1

개인 정보이므로 개인 정보는 도우미라고 추측 할 수 있습니다. 동일한 코드가 다른 곳에서 사용되면 기본 클래스 또는 도우미 클래스에 속합니다. – leppie

+0

도우미 기능입니다. – kidoman

+1

Microsoft에서 제공하는 코드 분석 도구는이 기능을 바람직하지 않은 것으로 플래그 지정합니다. 메소드가 인스턴스 필드를 사용하지 않으면 static이어야합니다. 필요한 시점에 (예 : 성급하게) 인스턴스를 만드는 데 어떤 어려움이 있는지 이해하지 못합니다. – Timwi

0

정적 메서드는 조금 더 빠를 수 있지만 다른 한편으로는 때로는 리팩터링하기가 더 어려울 수 있습니다.

+0

어떻게 그렇게됩니까? 예를 들어 주시겠습니까? – kidoman

+0

@ KiD0M4N, Raf이 맞습니다. 정적을 만들 필요가 없기 때문에 정적이 더 빠릅니다. 그러나 원하지 않는 결과를 방지하기 위해 변경 불가능한 객체 또는 상태 비 저장 조건에 정적 메소드를 사용해야합니다. –

+0

메소드를 호출하기 위해 객체를 작성해야하는 경우는 사실이지만, 이미 인스턴스가있는 경우 성능 차이는 무시할 수 있습니다. 존재하지만 4no 렌더링 엔진을 쓰지 않는 한 걱정할 필요가 없습니다. – GolezTrol

2

이유는 인스턴스 멤버를 IsProper 만들려면 :

상속 된 클래스에서 다른 구현을 필요로 IsProper
  • IsProper 정적을 IsProper 만들기 위해 미래에

이유를 회원에 액세스해야 할 수도 있습니다 회원 :

  • 귀하는 i 인스턴스 구성원.
  • 만 IsProper를 호출하는 클래스의 인스턴스를 생성해야하는 경우, 당신은이
관련 문제