在静态方法中调用非静态GetType()?

时间:2012-04-12 09:13:50

标签: c# .net types typeof gettype

  

可能重复:
  .NET: Determine the type of “this” class in its static method

Hello有没有办法在不使用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 个答案:

答案 0 :(得分:3)

您不能从像这样的静态方法调用实例方法。这完全没有意义。

在MSDN上阅读有关静态和实例方法的更多信息:

typeof()有什么问题?

答案 1 :(得分:2)

typeof()是一种编译时方法。您可以针对特定类型调用它。

GetType()是一种运行时方法。您可以针对特定实例调用它。如果class(type)是静态的,则无法获取其实例,因此调用该方法。

答案 2 :(得分:0)

您不能在静态方法中使用“this”,无论该类是静态还是非静态。你为什么不想使用typeof?在这种情况下,这是完全合理的,因为您总是在静态方法中知道包含类。使用GetType()的唯一原因是有可能在派生类中调用它。

答案 3 :(得分:0)

是的,您可以使用GetExistingWebSession调用GetType方法,因为它是非静态方法。

但问题实际上是你无法从GetOrCreate

中调用GetExistingWebSession

您需要一些方法来创建您可以使用的类的实例。

e.g。

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