gpt4 book ai didi

c# - C#非永久性“静态”关键字?

转载 作者:太空宇宙 更新时间:2023-11-03 18:19:20 25 4
gpt4 key购买 nike

我来自C / C ++背景,在使用C#做某些事情时遇到了麻烦。我现在的问题是我需要一个像在C ++中一样工作的static关键字。这样该属性对于该类的所有实例都是全局的,这就是C#所做的。但是我不想要C#(/ ASP.NET)中的持久性。我只希望对当前正在执行的页面上的类的所有实例全局使用静态属性。

怎么可能做到这一点?

基本上,我使用的是唯一名称,该名称只能在当前执行的页面上唯一。如果静态属性是持久性的,则在高流量期间发生整数翻转的可能性要高得多,这可能导致相同的值被使用两次。

就像有人去

static int i=0;
page_load...{
lbl.Text=i;
i++;
}


那么他们将获得0。如果其他人进入同一页面,他们也将获得0。而且还具有static属性,以便在该类的所有实例中都相同。

最佳答案

并没有真正干净的方法,但是如果您的对象将始终存在于HTTP页面/请求的上下文中,则可以使用当前ItemsHttpContext collection

public class YourClass
{
private static readonly string _itemKey = "Key Goes Here";
private readonly HttpContext _context;

public YourClass()
{
_context = HttpContext.Current;
if (_context == null) throw new InvalidOperationException("Boom!");

// set a default value here if you like...
if (_context.Items[_itemKey] == null)
{
_context.Items[_itemKey] = new YourType("Default Value");
}
}

public YourType NonPersistentStatic
{
get { return (YourType)(_context.Items[_itemKey]); }
set { _context.Items[_itemKey] = value; }
}
}

关于c# - C#非永久性“静态”关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1394523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com