2012-04-12 4 views
1

가능한 중복 :
.NET: Determine the type of “this” class in its static method정적 메서드에서 비 정적 GetType()을 호출합니까?

안녕하세요 typeof()를 사용하지 않고 비 정적 클래스의 비 정적 GetType()를 호출 할 수있는 방법이있다?

다음은 내가 작업중인 코드의 예입니다.

private static ISession GetOrCreate(ISessionFactory factory) 
{ 
    if (HttpContext.Current!=null) 
    { 
     ISession session = GetExistingWebSession(); 
     if (session == null) 
     { 
      session = OpenSessionAndAddToContext(factory); 
     } 
     else if (!session.IsOpen) 
     { 
      session = OpenSessionAndAddToContext(factory); 
     }   return session; 
    } 
} 

private ISession GetExistingWebSession() 
{ 
    return HttpContext.Current.Items[GetType().FullName] as ISession; 
} 
+0

유형을 모르고 유형을 기준으로 객체를 검색하려고합니다. 그게 어떻게 작동할까요? – hvd

+1

왜'typeof'를 사용하지 않으시겠습니까? – Jodrell

+1

왜 처음에는 유형 이름을 키로 사용합니까? – Jodrell

답변

0

클래스가 정적인지 비 정적인지는 정적 메서드에서 "this"를 사용할 수 없습니다. 왜 typeof를 사용하고 싶지 않으십니까? 정적 메서드에서 항상 포함하는 클래스를 알고 있기 때문에이 경우 완벽하게 합리적입니다. GetType()을 사용하는 유일한 이유는 파생 클래스에서 호출 될 가능성이있을 때입니다.

2

typeof()은 컴파일 타임 방법입니다. 특정 유형에 대해 호출합니다.

GetType()은 런타임 메서드입니다. 특정 인스턴스에 대해 호출합니다. class (type)가 정적 인 경우 인스턴스를 가져올 수 없으므로 메소드를 호출합니다.

0

예 GetType 메서드는 GetExistingWebSession에서 정적 메서드가 아니므로 호출 할 수 있습니다.

문제는 당신이 당신이 다음 사용할 수있는 클래스의 인스턴스를 생성하는 몇 가지 방법이 필요 GetOrCreate

내에서 GetExistingWebSession를 호출 할 수 있다는 사실이다 그러나.

MyClass c=new MyClass(); 
ISession session = c.GetExistingWebSession();