2012-07-17 12 views
6

Busco en algún código que escribió un compañero de trabajo y lo que espera que suceda no lo es. Aquí está el código:Tratando de entender cómo estática está trabajando en este caso

public class SingletonClass 
{ 
    private static readonly SingletonClass _instance = new SingletonClass(); 

    public static SingletonClass Instance 
    { 
     get { return _instance; } 
    } 

    private SingletonClass() 
    { 
     //non static properties are set here 
     this.connectionString = "bla" 
     this.created = System.DateTime.Now; 
    } 
} 

En otra clase, lo que habría esperado a ser capaz de hacer:

private SingletonClass sc = SingletonClass.Instance.Instance.Instance.Instance.Instance.Instance; 

y hacer referencia a la misma instancia de esa clase. Lo que sucede es que solo puedo tener uno .Instance. Algo que no esperaba Si la propiedad Instance devuelve una clase SingletonClass, por qué no puedo llamar a la propiedad Instance en esa clase de regresar y así sucesivamente y así sucesivamente?

Respuesta

12

Si la propiedad Instancia devuelve una clase SingletonClass, por qué no puedo llamar a la propiedad Instancia en dicha clase devuelto y así sucesivamente y así sucesivamente?

Debido a que sólo se puede acceder a través de la .InstanceSingletonClass tipo, no a través de una instancia de ese tipo.

Desde Instance es estático, debe acceder a él a través del tipo:

SingletonInstance inst = SingletonInstance.Instance; // Access via type 

// This fails, because you're accessing it via an instance 
// inst.Instance 

Cuando intenta cadena de éstos, que estás haciendo con eficacia:

SingletonInstance temp = SingletonInstance.Instance; // Access via type 

// ***** BAD CODE BELOW **** 
// This fails at compile time, since you're trying to access via an instance 
SingletonInstance temp2 = temp.Instance; 
+0

Ah, claro, que tiene sentido ahora. – Justin

0

En el código va a devolver una instancia de SingletonClass a través de la instancia que es una estática de tipo Singleton

por lo que no le permitirá hacer esto SingletonClass.Instance.Instance b ebido a la SingletonClass.Instance está volviendo una instancia de SingletonClass

Todo lo que hace que se salvando de esta manera SingletonClass _instance = new SingletonClass(); en este SingletonClass.Instance.Instance

Cuestiones relacionadas