Domanda

Sto creando una classe di supporto statico per i servizi web che sto scrivendo. Sto toccando nella API di Telligent e quindi la creazione di questi oggetti Telligent "servizio" che mi permettono di fare le cose con la piattaforma. Ad esempio, sto creando un oggetto MembershipSerice nella mia classe di supporto in modo da poter fare cose di appartenenza con lo stesso oggetto. Nella mia classe helper ho una proprietà con un getter che crea una nuova uno di questi oggetti:

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

E poi ho un metodo che restituisce quella proprietà:

public MembershipService getMembershipService() {
  return _MembershipService;
}

Questo significa che dal momento che la proprietà è statica che il nuovo oggetto creato nel getter viene creato solo una volta? Inoltre, in termini di stile di codifica, sarebbe essere solo meglio per rendere la proprietà pubblica e quindi il metodo non sarebbe necessario.

O ... sarebbe meglio per creare proprio l'oggetto come una variabile privata e restituirlo attraverso il metodo pubblico:

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

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

Se avete qualche idea sullo stile di come ho creato questo in modo efficace la sua e si comporta bene, per favore fatemelo sapere.

È stato utile?

Soluzione

  

Questo significa che dal momento che la proprietà è statica che il nuovo oggetto creato nel getter viene creato solo una volta?

No, perché si deve

new MembershipService(path, usr, pwd);

all'interno del getter, indipendentemente _MembershipService essere dichiarato static una nuova istanza verrà creata ad ogni chiamata. Tutto ciò che static significa in questo contesto è che è possibile richiamare il metodo senza avere un'istanza della classe di definizione.

Per quanto riguarda commentando lo stile, beh, in realtà dipende da cosa si vuole fare. Vuoi una singola istanza? Se è così, creare un _mbrSvc variabile membro statica e restituire che dal getter:

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

In caso contrario, come lo è va bene.

Altri suggerimenti

Jason, Mark Solo per amor di completezza, dipende als sulla definizione di MembershipService. Se MembershipService è una classe, allora l'oggetto è condiviso tra i metodi di chiamata. Se MembershipService è una struttura, è sempre in fase di creazione di una copia. Basta definendolo un MembershipService-oggetto non specifica la differenza, dal momento che in DotNet tutto è un oggetto.

Se l'oggetto è costoso per creare, utilizzare un pattern Singleton combinato con caricamento pigro:

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

Ogni volta che si utilizza nuovo viene creato un nuovo oggetto.

Pertanto, il primo approccio crea un nuovo oggetto ogni volta che la proprietà si accede.

Quello che state cercando è chiamato Singleton - il secondo approccio è una possibilità di implementare in C #

.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top