可能重复:
.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;
}
答案 0 :(得分:3)
您不能从像这样的静态方法调用实例方法。这完全没有意义。
在MSDN上阅读有关静态和实例方法的更多信息:
typeof()
有什么问题?
答案 1 :(得分:2)
typeof()
是一种编译时方法。您可以针对特定类型调用它。
GetType()
是一种运行时方法。您可以针对特定实例调用它。如果class(type)是静态的,则无法获取其实例,因此调用该方法。
答案 2 :(得分:0)
您不能在静态方法中使用“this”,无论该类是静态还是非静态。你为什么不想使用typeof?在这种情况下,这是完全合理的,因为您总是在静态方法中知道包含类。使用GetType()的唯一原因是有可能在派生类中调用它。
答案 3 :(得分:0)
是的,您可以使用GetExistingWebSession
调用GetType方法,因为它是非静态方法。
但问题实际上是你无法从GetOrCreate
您需要一些方法来创建您可以使用的类的实例。
e.g。
MyClass c=new MyClass();
ISession session = c.GetExistingWebSession();