在静态方法中调用非静态 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;
}
不能从这样的静态方法调用实例方法。这完全没有意义。
阅读有关 MSDN 上的静态方法和实例方法的详细信息:
- 静态类
- 和静态类成员(C# 编程指南)
- 10.2.5 静态成员和实例成员
typeof()
怎么了?
typeof()
是一个编译时方法。您可以针对特定类型调用它。
GetType()
是一种运行时方法。针对特定实例调用它。如果类(类型)是静态的,则无法获取其实例,因此调用该方法。
不能在静态方法中使用"this",无论该类是静态的还是非静态的。你为什么不想使用typeof?在这种情况下,这是完全合理的,因为您始终知道静态方法中的包含类。使用 GetType() 的唯一原因是当有可能在派生类中调用它时。
是的,您可以使用 GetExistingWebSession
调用 GetType 方法,因为它是一个非静态方法。
但是,您的问题实际上是您无法从GetOrCreate
中调用GetExistingWebSession
您需要一些方法来创建类的实例,然后可以使用该实例。
例如
MyClass c=new MyClass();
ISession session = c.GetExistingWebSession();