如何定义一个全局数组?

zclzy520 2007-11-04 11:57:29
我想定义一个全局数组,能在所有aspx页面中进行修改和应用。
比如建立string aa[]这个数组,每成功登陆一个用户就往aa[]里增加一个记录,退出一个用户则删除一条记录,请问如何实现
...全文
1014 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
lesdly 2007-11-05
  • 打赏
  • 举报
回复
请问一下jeremyyang824,SingletionList类的实例会不会被回收掉?
JYYCOM 2007-11-05
  • 打赏
  • 举报
回复
得学习一下单例模式了
JYYCOM 2007-11-05
  • 打赏
  • 举报
回复
看来真得好好学习一下设计模式了,上面好像就是单例模式
rydanliu 2007-11-04
  • 打赏
  • 举报
回复
global.asa或者放在cache里
jeremyyang824 2007-11-04
  • 打赏
  • 举报
回复

public class SingletionList
{
private static SingletionList singleton;
private System.Collections.ArrayList list = new System.Collections.ArrayList();

protected SingletionList()
{ }

public static System.Collections.ArrayList GetList()
{
if (singleton == null)
{
lock (new object())
{
if (singleton == null)
{
singleton = new SingletionList();
}
}
}
return singleton.list;
}
}


调用:

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ArrayList list = SingletionList.GetList();
list.Add("aaa");
}
}
protected void Button1_Click(object sender, EventArgs e)
{
ArrayList list = SingletionList.GetList();
this.Label1.Text = list[0].ToString();
}
}
我姓区不姓区 2007-11-04
  • 打赏
  • 举报
回复
同上
AlphaWu 2007-11-04
  • 打赏
  • 举报
回复
可以定义在global.asa里面。
jeremyyang824 2007-11-04
  • 打赏
  • 举报
回复
SingletionList类 放在cs文件里面。
后面的代码只是随便调用了给你看看的,主要是SingletionList类
zclzy520 2007-11-04
  • 打赏
  • 举报
回复
结帐结帐了,多谢各位拉
jeremyyang824的方法可行
zclzy520 2007-11-04
  • 打赏
  • 举报
回复
我试下楼上的方法,请问下SingletionList类是放在.cs里吗?
后面的代码就是aspx中的应用?
jeremyyang824 2007-11-04
  • 打赏
  • 举报
回复
能,单间模式的本意就是全局唯一。
随便你调用几次SingletionList.GetList(); 获取的ArrayList都是同一个ArrayList

所以我在调用的时候一次是在isPostBack中,这只有在首次请求中执行,
而在Button_Click中再次调用,注意,Button_Click的代码是回发后的,显示的还是同一个ArrayList

根据你的需求,你可以在登陆方法中SingletionList.GetList().Add(用户对象);
然后在抽奖的时候在随机从SingletionList.GetList()中取出一个用户对象。
你可以一试.
Seeko0 2007-11-04
  • 打赏
  • 举报
回复
你这里需要的是登录后的用户的信息,需要看是如何记录哪些人在线。

记录在线的登录用户可以使用Cache或者数据库。如果使用数据库保存登录用户,你的问题将不存在什么问题,根据登录用户的总数生成一个随机数。
如果使用Cache,我想应该可以这样设计:

首先分两个状态,登录和注销,需要注意的是B/S中是无状态的,你不知道用户什么时候会向服务器发出请求,表示他在线,现在好的解决方案就是
ajax从浏览器上定时向服务器发出请求,表示登录用户尚在。

登录后:可以定义一个Hashtable,用户登录后,增加一条信息,并保存这个Hashtable到Cache中,主动注销或者直接关闭浏览器再从这个Hashtable中删除相应的信息。
cqdyh 2007-11-04
  • 打赏
  • 举报
回复
不使用数据表就用Applocation级变量.
zclzy520 2007-11-04
  • 打赏
  • 举报
回复
可能我的表达有问题,其实我的需求是这样的,首先建立一个数组string[] user;
然后每成功登陆一个用户后就要在user这个数组中存入一个值,比如ID,我一直要使用这个全局数组user,以便对所有在线用户进行随机抽取,公布中奖ID

您所使用的那方式能保证吗?
jeremyyang824 2007-11-04
  • 打赏
  • 举报
回复
我写的那段代码就是用单件模式写的可以全局访问的ArrayList. 因为string[]在new的时候是要固定长度的,所以用ArrayList.
global.asa里面的Session_Start只是当一个请求被发起时的事件,和搂主的需求是不同的。Application_Start是应用程序运行时触发的事件,就更没关系了。
要么你用HttpApplicationState做,但对于你的需求我不是很推荐
zclzy520 2007-11-04
  • 打赏
  • 举报
回复
是在global.asa 的Application_Start事件里这样定义吗?string[] user;
在aspx页面里如何使用这个数组呢?

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧