Pregunta

Estoy creando una clase auxiliar estática para los servicios web que estoy escribiendo. Estoy aprovechando la API de Telligent y por lo tanto la creación de estos objetos Telligent "servicio" que me permite hacer cosas con la plataforma. Por ejemplo, estoy creando un objeto MembershipSerice en mi clase de ayuda para que pueda hacer cosas membresía con el mismo objeto. En mi clase de ayuda tengo una propiedad con un captador que crea un nuevo uno de estos objetos:

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

Y luego tengo un método que devuelve esa propiedad:

public MembershipService getMembershipService() {
  return _MembershipService;
}

¿Quiere decir que, puesto que la propiedad es estática que el nuevo objeto creado en el captador sólo se crea una vez? Asimismo, en términos de estilo de codificación, sería que sólo sea mejor para que la propiedad pública y, por tanto, el método sería innecesaria.

O ... ¿sería preferible crear el objeto como una variable privada y devolverlo a través del método público:

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 usted tiene alguna idea sobre el estilo de cómo lo configuran por lo que su eficiencia y se comporta bien, por favor hágamelo saber.

¿Fue útil?

Solución

  

¿Quiere decir que, puesto que la propiedad es estática que el nuevo objeto creado en el captador sólo se crea una vez?

No, porque usted tiene

new MembershipService(path, usr, pwd);

en el interior del captador, independientemente de _MembershipService ser declarado static una nueva instancia se creará en cada llamada. Todo lo que static significa en este contexto es que se puede invocar el método sin tener una instancia de la clase de definición.

En cuanto al comentar el estilo, así, que realmente depende de lo que quiere hacer. ¿Quieres un ejemplo? Si es así, crear una variable _mbrSvc miembro estático y volver que desde el captador:

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

De lo contrario, ya que es está bien.

Otros consejos

Jason, Mark Sólo por el bien completar, ALS depende de la definición de MembershipService. Si MembershipService es una clase entonces el objeto se comparte entre los métodos de llamada. Si MembershipService es una estructura, siempre se crea una copia. Sólo llamándolo un MembershipService a objetos no especifica la diferencia, ya que en DotNet todo es un objeto.

Si el objeto es costoso crear, considerar el uso de un patrón singleton combinado con la carga diferida:

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

Cada vez que se utiliza nueva se crea un nuevo objeto.

Por lo tanto, el primer enfoque crea un nuevo objeto cada vez que se accede a la propiedad.

Lo que usted está buscando se llama un Singleton - el segundo enfoque es una de las posibilidades para su implementación en C #

.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top