Est-ce un nouvel objet qui est créé dans un getter de propriété statique seulement créé une fois?

StackOverflow https://stackoverflow.com/questions/2042857

Question

Je crée une classe d'aide statique pour les services web que je vous écris. J'écoutes dans l'API de Telligent et créant ainsi ces objets Telligent « service » qui me permettent de faire des choses avec la plate-forme. Par exemple, je crée un objet MembershipSerice dans ma classe d'aide pour que je puisse faire des choses d'adhésion avec le même objet. Dans ma classe d'aide, j'ai une propriété avec un getter qui crée une nouvelle de ces objets:

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

Et puis j'ai une méthode qui retourne cette propriété:

public MembershipService getMembershipService() {
  return _MembershipService;
}

Est-ce que cela signifie puisque la propriété est statique que le nouvel objet créé dans le getter est créé uniquement une fois? En outre, en termes de style de codage, serait-il juste être préférable de rendre la propriété publique et donc la méthode ne serait pas nécessaire.

Ou ... serait-il préférable de créer simplement l'objet comme une variable privée et le retourner par la méthode publique:

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

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

Si vous avez des idées sur le style de la façon dont je le mettre en place si son efficace et donne de bons résultats, s'il vous plaît laissez-moi savoir.

Était-ce utile?

La solution

  

Est-ce que cela signifie puisque la propriété est statique que le nouvel objet créé dans le getter est créé uniquement une fois?

Non, parce que vous avez

new MembershipService(path, usr, pwd);

à l'intérieur du getter, quel que soit _MembershipService soit déclarée static une nouvelle instance sera créée à chaque appel. Tout ce qui static signifie dans ce contexte est que vous pouvez appeler la méthode sans avoir une instance de la classe de définition.

En ce qui concerne des commentaires sur le style, eh bien, cela dépend vraiment de ce que vous voulez faire. Voulez-vous une seule instance? Dans ce cas, créer une _mbrSvc variable membre statique et retour que du getter:

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

Dans le cas contraire, comme il est très bien.

Autres conseils

Jason, Mark Juste pour être complet, il dépend als de la définition de MembershipService. Si MembershipService est une classe alors l'objet est partagé entre les méthodes d'appel. Si MembershipService est un struct, une copie est toujours en cours de création. Il suffit de l'appeler un MembershipService-objet ne précise pas la différence, puisque dans DotNet tout est un objet.

Si l'objet est coûteux à créer, pensez à utiliser un modèle singleton combiné avec le chargement paresseux:

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

Chaque fois que vous utilisez nouveau est créé un nouvel objet.

Par conséquent, la première approche crée un nouvel objet à chaque fois que la propriété est accessible.

Ce que vous cherchez est appelé Singleton - votre deuxième approche est une possibilité de mettre en œuvre en C #

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top