2012-04-12 18 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)がstaticの場合、そのインスタンスを取得することができないため、メソッドを呼び出します。

0

はい、GetTypeメソッドはGetExistingWebSessionから呼び出すことができます。これは非静的メソッドであるためです。

あなたの問題はあなたがあなたがあなたがして使用することができ、あなたのクラスのインスタンスを作成するために、いくつかの方法が必要GetOrCreate

内からGetExistingWebSessionを呼び出すことはできませんことを、実際にあるが。

MyClass c=new MyClass(); 
ISession session = c.GetExistingWebSession(); 
関連する問題