1

重複の可能性:
.NET:静的メソッドで「this」クラスのタイプを判別します

こんにちは、GetType()使用せずに非静的クラスで非静的を呼び出す方法はありますtypeof()か?

これが私が取り組んでいる私のコードの例です。

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

4 に答える 4

4

このような静的メソッドからインスタンスメソッドを呼び出すことはできません。それはまったく意味がありません。

MSDNで静的メソッドとインスタンスメソッドの詳細を読んでください。

何が問題になっていtypeof()ますか?

于 2012-04-12T09:19:25.050 に答える
2

typeof()コンパイル時のメソッドです。あなたはそれを特定のタイプに対して呼びます。

GetType()実行時メソッドです。特定のインスタンスに対してそれを呼び出します。クラス(タイプ)が静的である場合、そのインスタンスを取得できないため、メソッドを呼び出します。

于 2012-04-12T09:23:08.310 に答える
0

クラスが静的であるか非静的であるかにかかわらず、静的メソッドで「this」を使用することはできません。typeofを使いたくないのはなぜですか?この場合、静的メソッドに含まれるクラスを常に知っているので、これは完全に合理的です。GetType()を使用する唯一の理由は、派生クラスで呼び出される可能性がある場合です。

于 2012-04-12T09:21:59.573 に答える
0

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

ただし、実際の問題は、内部からGetExistingWebSessionを呼び出せないことです。GetOrCreate

クラスのインスタンスを作成して使用できるようにするためのメソッドが必要です。

例えば

MyClass c=new MyClass();
ISession session = c.GetExistingWebSession(); 
于 2012-04-12T09:26:23.003 に答える