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

本文关键字:GetType 静态 静态方法 调用 | 更新日期: 2023-09-27 18:30:55

可能的重复项:
.NET:在其静态方法中确定"this"类的类型

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

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

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

阅读有关 MSDN 上的静态方法和实例方法的详细信息:

    静态类
  • 和静态类成员(C# 编程指南)
  • 10.2.5 静态成员和实例成员

typeof()怎么了?

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

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

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

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

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

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

例如

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