문제

나는 내가 쓰고있는 웹 서비스를위한 정적 헬퍼 클래스를 만들고있다. 나는 Telligent의 API를 활용하고 있으므로 플랫폼으로 일을 할 수있는이 "서비스"객체를 만들고 있습니다. 예를 들어, 도우미 클래스에서 멤버십 객체를 만들어 동일한 개체로 멤버십 작업을 수행 할 수 있습니다. 내 도우미 클래스에는 다음과 같은 새로운 개체를 만드는 getter가있는 속성이 있습니다.

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();

내가 이것을 설정하는 방법에 대한 스타일에 대한 생각이 있으므로 효율적이고 성능이 좋으면 알려주십시오.

도움이 되었습니까?

해결책

속성이 정적이기 때문에 Getter에서 생성 된 새 개체가 한 번만 만들어 졌다는 것을 의미합니까?

아니요

new MembershipService(path, usr, pwd);

getter 내부에 관계없이 _MembershipService 선언되고 있습니다 static 호출마다 새 인스턴스가 생성됩니다. 모든 static 이러한 맥락에서 정의 클래스의 인스턴스없이 메소드를 호출 할 수 있다는 의미입니다.

스타일에 대해 언급하는 한, 그것은 실제로 당신이하고 싶은 일에 달려 있습니다. 단일 인스턴스를 원하십니까? 그렇다면 정적 멤버 변수를 만듭니다 _mbrSvc 그리고 getter에서 그것을 반환하십시오.

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

그렇지 않으면 괜찮습니다.

다른 팁

Jason, Mark는 완전성을 위해서만 멤버시 서비스의 정의에 달려 있습니다. 멤버십 서비스가 클래스 인 경우 객체는 호출 방법간에 공유됩니다. 멤버십 서비스가 구조물이라면 항상 사본이 생성됩니다. DotNet에서는 모든 것이 객체이기 때문에 멤버시 서비스 서비스-오브젝트라고 부르는 것만으로도 차이를 지정하지 않습니다.

물체가 생성하는 데 비싸면 게으른 하중과 결합 된 싱글 톤 패턴 사용을 고려하십시오.

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

당신이 사용할 때마다 새로운 새로운 객체가 생성됩니다.

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

당신이 찾고있는 것은 싱글 톤이라고합니다. 두 번째 접근 방식은 C#에서이를 구현할 가능성 중 하나입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top