【问题标题】:Call non-static GetType() in static method? [duplicate]在静态方法中调用非静态 GetType()? [复制]
【发布时间】:2012-04-24 15:03:40
【问题描述】:

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

您好,有什么方法可以在不使用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;
}

【问题讨论】:

  • 您试图通过对象的类型来查找对象,但不知道它的类型。这应该如何工作?
  • 你为什么不想使用typeof
  • 为什么首先使用类型名称作为您的键?
  • 你想得到什么Type

标签: c# .net types typeof gettype


【解决方案1】:

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

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

typeof() 有什么问题?

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        但是您的问题实际上是您无法从 GetOrCreate 中调用 GetExistingWebSession

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

        例如

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-03-20
          • 2011-12-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多