当制备方法静态 - 需要一个对象引用来访问非静态字段,访问非静态字段,方法或属性是必需的
一个对象引用当制备方法静态 - 需要一个对象引用来访问非静态字段,访问非静态字段,方法或属性是必需的
当我使GetCartId静态的Visual Studio抱怨
public class Uno
{
private readonly HttpContext context;
public Uno()
{
}
public Uno(HttpContext _context)
{
context = _context;
}
public static string GetCartId()
{
string cartId = "";
var stringId = context.Session.GetString("cart");
if(stringId == null)
{
cartId = Guid.NewGuid().ToString();
stringId = cartId;
}
else if(stringId != null)
{
cartId = stringId;
}
return cartId;
}
}
您正在使用该方法访问context
。它必须是静态的,为了能够使用它:
private static readonly HttpContext context;
readonly
不会使它static
。实例级别为readonly
。 (const
,另一方面是通过定义静态)
我想提醒你,尽管使用static
与HttpContext
因为static
在ASP.NET跨实例共享。你可能最终混合用户会话!
从静态方法本身使用HttpContext.Current
。
是的,它已经解决了。谢谢 – Rampp
context
不是静态的,所以你不能从静态方法访问它,而没有Uno
的实例。但即使如此,你也无法访问它,因为它是private
。
相反,我会用HttpContext.Current
甚至在静态方法的工作原理:
public static string GetCartId()
{
var context = HttpContext.Current;
if(context == null) return null;
string cartId = "";
var stringId = context.Session.GetString("cart");
if(stringId == null)
{
cartId = Guid.NewGuid().ToString();
stringId = cartId;
}
else if(stringId != null)
{
cartId = stringId;
}
return cartId;
}
是的,我已经意识到并编辑了我的代码。现在,它的作品谢谢你。 – Rampp
@poke,我错了投票关闭这一个问题,与一般的“从静态访问实例成员”。这个问题与'HttpContext.Current'相关。 – Sinatr