2012-07-17 3 views
6

동료가 작성한 코드를보고 있는데 어떤 일이 발생하는지 예상하고 있지 않습니다. 여기에 코드입니다 :이 경우에 정적이 작동하는 방식을 이해하려고 시도했습니다.

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

을 그리고 그 클래스의 동일한 인스턴스를 참조 : 다른 클래스에서

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; 
    } 
} 

, 내가 할 수있을 것으로 기대했을 것이다. 나는 .Instance 하나만 가질 수있다. 내가 예상하지 못한 것. Instance 속성이 SingletonClass 클래스를 반환하는 경우 해당 반환 된 클래스에 Instance 속성을 호출 할 수없는 이유는 무엇입니까?

답변

12

Instance 속성이 SingletonClass 클래스를 반환하면 그 반환 된 클래스의 Instance 속성을 호출 할 수없는 이유는 무엇입니까?

경우에만 SingletonClass유형를 통해 .Instance에 액세스 할 수 있기 때문에,없는 유형의 인스턴스를 통해.

Instance 정적이기 때문에, 당신은 유형을 통해 액세스해야합니다

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

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

당신이 체인이 시도, 효과적으로 일을하는지 :

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

바로 아, 이제 의미가에이 SingletonClass _instance = new SingletonClass(); 일에서 당신을 저장하고 SingletonClass

의 인스턴스를 반환합니다. – Justin

0

코드에서 당신이 반환된다 SingletonClass 인스턴스를 통해 단일 유형의 정적 인스턴스

그래서이 작업을 수행 할 수 없습니다. SingletonClass.Instance.Instance b ecause SingletonClass.Instance 모두가이 SingletonClass.Instance.Instance

관련 문제