2010-01-11 2 views
4

필자가 작성중인 웹 서비스에 대한 정적 도우미 클래스를 만들고있다. 저는 Telligent의 API를 활용하여 플랫폼으로 작업을 수행 할 수있는 이러한 Telligent "서비스"객체를 만듭니다. 예를 들어 동일한 도큐멘트로 멤버십을 수행 할 수 있도록 도우미 클래스에 MembershipSerice 객체를 만듭니다.정적 속성 가져 오기 도구에서 만든 새 개체가 한 번만 만들어 졌습니까?

private static MembershipService _MembershipService { 
    get { 
    return new MembershipService(path, usr, pwd); 
    } 
} 

그리고 내가 그 재산 반환하는 방법이 있습니다 : 그 이후로 뜻

public MembershipService getMembershipService() { 
    return _MembershipService; 
} 

을 내 헬퍼 클래스에서 나는 이러한 개체의 새로운 하나를 생성하는 게터와 속성이 getter에서 생성 된 새 객체가 한 번만 생성되는 정적 속성입니다. 또한 코딩 스타일 측면에서 볼 때 속성을 공개로 설정하는 것이 좋을 것이므로 메서드를 사용하지 않아도됩니다.

아니면 ... 그냥 개인 변수로 객체를 생성하고 공공 방법을 통해 그것을 반환하기 위해 더 나은 것 :

private static MembershipService _mbrSvc = new MembershipService(path, usr, pwd); 
public MembershipService getMembershipService() { 
    return _mbrSvc; 
} 

// then called elsewhere by me via: 
MembershipService svc = MyHelperClass.getMembershipService(); 

당신은 내가이를 설정하는 방법의 스타일에 어떤 생각이있는 경우 그래서 그것의 능률적이고 잘 실행하십시오, 저가 알게하십시오.

답변

12

게터에서 생성 된 새 객체가 한 번만 생성된다는 속성이 정적이기 때문에 의미가 있습니까? _MembershipService의 관계

아니, 당신이 게터 내부

new MembershipService(path, usr, pwd); 

을 가지고 있기 때문에 새 인스턴스가 모든 호출에 생성됩니다 static를 선언된다. 이 모든 내용은 static이라는 의미에서 정의 클래스의 인스턴스가 없어도 메소드를 호출 할 수 있다는 것을 의미합니다.

스타일에 대한 의견을 말할 때까지는 실제로 무엇을하고 싶은지에 달려 있습니다. 단일 인스턴스가 필요합니까? 그렇다면, 정적 멤버 변수 _mbrSvc를 작성하고 게터에서 그 반환 :

private static MembershipService _mbrSvc = new MembershipService(path, usr, pwd); 
private static MembershipService _MembershipService { 
    get { 
     return _mbrSvc; 
    } 
} 

를, 그렇지 않으면 괜찮 때문이다.

+0

감사 제이슨 :

개체를 만들 비싼 경우

는, 지연로드와 함께 싱글 톤 패턴을 사용하는 것이 좋습니다. –

1

을 사용할 때마다 새 개체가 만들어집니다.

따라서 첫 번째 방법은 속성에 액세스 할 때마다 새 개체를 만듭니다.

당신이 찾고있는 것을 싱글 톤이라고 부릅니다. 두 번째 방법은 C#으로 구현하는 것입니다.

+0

감사합니다. 나는 이것이 싱글 톤 패턴이라는 것을 깨닫고 변수를 사용하면 효과가있다. –

3

Jason, Mark 완벽을 기하기 위해 MembershipService의 정의에 따라 다릅니다. MembershipService가 클래스이면 개체가 호출 메서드간에 공유됩니다. MembershipService가 구조체이면 항상 복사본이 만들어집니다. DotNet에서 모든 것이 객체이기 때문에 MembershipService 객체를 호출하면 차이가 지정되지 않습니다.자세한 사항은

private static MembershipService _mbrSvc; 
private static MembershipService _MembershipService { 
    get { 
     if(_mbrSvc == null) 
     { 
      _mbrSvc = new MembershipService(path, usr, pwd); 
     } 
     return _mbrSvc; 
    } 
} 
+0

추가 정보를 제공해 주셔서 감사합니다. 내가 게시하고 대답을 얻은 후에, 동료 중 한 사람이 실제로 나에게 당신이 그것을 필요로 할 때 만들 때와 똑같이 말했다. 감사! –

+0

null 통합 연산자를 사용하여이 코드를 간소화 할 수 있습니다. 'return _mbrSvc ?? (_mbrSvc = 새 MembershipService (경로, usr, pwd)); –

관련 문제