请教一个 c# 在静态类里定义个全局对象
usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingHy.Models;usingHy.D...
using System;
using System.Collections.Generic;
using System.Text;
using Hy.Models;
using Hy.DAL.XiTong;
using System.Data;
using System.Web;
using Hyby.Component;
using Hy.Common.HyCommon;
using Hy.BLL.HySystem;
namespace Hy.BLL
{
public static class ExecuteBillManager
{
public static string ExecuteBind(int pageIndex, int pageSize, string WhereStr, ExecuteBillModel eb, string Taskno)
{
}
}
}
我有一个这样的静态类里面也是静态方法然后这个类里面有几个方法需要用到对象 UserAccess Uaxy = PubFunction.ThisLimit();
然后我或者里面的属性的值(Uaxy.Username 在里面已经设置值了)
问题是 : 如果我把UserAccess Uaxy = PubFunction.ThisLimit();放到类里面供全局使用 也就是
public static class ExecuteBillManager
{
UserAccess Uaxy = PubFunction.ThisLimit();
...静态方法1
...静态方法2
}
那么在程序第一次启动时他可以获取到值 然后当我再次调用静态方法时 Uaxy.Username 的值 总是第一次那个值 (就像缓存一样) 但是我只要把UserAccess Uaxy = PubFunction.ThisLimit();放到每一个方法里去调用那么值肯定变
这是什么原因呢 我以前有过一次 在类里面定义了一个 全局变量 供所有方法使用 但是也是在值上出现了问题 到时静态类的事 还是 c#就不可以在类里面定义全局的东西 变量或者 调用其他方法 展开
using System.Collections.Generic;
using System.Text;
using Hy.Models;
using Hy.DAL.XiTong;
using System.Data;
using System.Web;
using Hyby.Component;
using Hy.Common.HyCommon;
using Hy.BLL.HySystem;
namespace Hy.BLL
{
public static class ExecuteBillManager
{
public static string ExecuteBind(int pageIndex, int pageSize, string WhereStr, ExecuteBillModel eb, string Taskno)
{
}
}
}
我有一个这样的静态类里面也是静态方法然后这个类里面有几个方法需要用到对象 UserAccess Uaxy = PubFunction.ThisLimit();
然后我或者里面的属性的值(Uaxy.Username 在里面已经设置值了)
问题是 : 如果我把UserAccess Uaxy = PubFunction.ThisLimit();放到类里面供全局使用 也就是
public static class ExecuteBillManager
{
UserAccess Uaxy = PubFunction.ThisLimit();
...静态方法1
...静态方法2
}
那么在程序第一次启动时他可以获取到值 然后当我再次调用静态方法时 Uaxy.Username 的值 总是第一次那个值 (就像缓存一样) 但是我只要把UserAccess Uaxy = PubFunction.ThisLimit();放到每一个方法里去调用那么值肯定变
这是什么原因呢 我以前有过一次 在类里面定义了一个 全局变量 供所有方法使用 但是也是在值上出现了问题 到时静态类的事 还是 c#就不可以在类里面定义全局的东西 变量或者 调用其他方法 展开
1个回答
展开全部
把我给看晕了,首先在c#里定义一个全局变量肯定是没问题的
你要清楚静态变量跟静态方法在本质上是有区别的
变量可以是全局的,但是方法没有全局的这个概念
静态方法与静态变量的区别:
静态方法只是可以无需对类进行实例化便可调用,不过静态类只能使用静态变量(属性),而非静态的方法可以调用类中的所有成员,在外部使用静态方法与非静态方法其实没有多大区别
类中静态变量其实就是全局变量,任何对该类的这个变量进行的操作都是互相影响的
PS:如果你只要一个全局变量,一个方法外部的静态变量就可以了,放在方法内部的变量叫局部变量
你要清楚静态变量跟静态方法在本质上是有区别的
变量可以是全局的,但是方法没有全局的这个概念
静态方法与静态变量的区别:
静态方法只是可以无需对类进行实例化便可调用,不过静态类只能使用静态变量(属性),而非静态的方法可以调用类中的所有成员,在外部使用静态方法与非静态方法其实没有多大区别
类中静态变量其实就是全局变量,任何对该类的这个变量进行的操作都是互相影响的
PS:如果你只要一个全局变量,一个方法外部的静态变量就可以了,放在方法内部的变量叫局部变量
更多追问追答
追问
就是说我刚开始一个静态类里面有三个方法然后我是在每一个方法里都写了一遍 UserAccess Uaxy = PubFunction.ThisLimit()(这个是返回当前登录人的一些基本信息 角色了 登录名了 等等...) 然后呢 我现在 想在顶部 也就是类里面直接声明,下面无论哪方法直接Uaxy . 就Ok了,但是这就是问题了 发现 Uaxy 总也不更新都是第一次的值 ,然后除非过五分钟之后 它会更新 就像缓存一样,但是我给他放到每一个方法里就好使...
追答
你不会是把UserAccess Uaxy = PubFunction.ThisLimit();这个写到全局了吧
这样写的话其实相当于只对UserAccess进行了初始化PubFunction.ThisLimit();的值
也就是说只有第一次调用UserAccess时为UserAccess赋予了PubFunction.ThisLimit()的值
以后每次调用UserAccess都只是使用这个值,而不再动态执行PubFunction.ThisLimit()
所以总是第一次的值
你需要在每个方法里执行一遍Uaxy = PubFunction.ThisLimit();
UserAccess Uaxy作为全局变量只是为了统一性和跨方法
PS:至于为什么过5分钟后会更新可能是变量在内存中的保存时间问题
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询