C#中静态方法和静态变量

panbaotong120 2010-08-17 01:59:33
以前就听很多程序员说在程序中发尽量不用使用静态变量和静态方法,因为静态方法和静态变量会产生很多不正确的数据,一直没理解这句话的意思,在网上看到静态变量是共享的,但是也有很多人建议使用静态方法,不知道该什么下情况使用静态方法和变量,什么情况下不使用,请对这方面有了解的程序员给于解答,比如我写了段操作数据库的静态方法:
public static void ExecuteNonQuery(string SqlString)
{
SqlCommand cmd = CreateCommand(SqlString);
cmd.ExecuteNonQuery();
Close();//关闭数据库连接
}
请大家说说这样写的有什么问题
...全文
981 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
gaofq 2012-08-17
  • 打赏
  • 举报
回复
求静态类和静态方法?
xing150360 2011-08-08
  • 打赏
  • 举报
回复
如果从性能上考虑,或者说从线程上考虑,静态方法和非静态方法,那个交优点哪,如果用静态的,在多用户调用的时候会出现等待交长的反应时间吗
cuike519 2010-08-18
  • 打赏
  • 举报
回复
静态方法放心大胆的用,没问题。

变量在多线程环境下可能需要同步。
ganchunsaixx 2010-08-18
  • 打赏
  • 举报
回复
静态变量和静态方法在加载之前它们就存在了,而且会一直存在,少量是可以的,如果太多,会占用大量的资源,而其他方法是等到用NEW关键字的时候草占内存,然后被释放
starj1 2010-08-17
  • 打赏
  • 举报
回复
单线程单用户的话,静态变量随便用。
多线程或多用户的话,静态变量前加volitile,静态函数里面使用Lock控制线程安全。
songtaixin 2010-08-17
  • 打赏
  • 举报
回复
有些迷糊!帮顶一下!!!!
wuyq11 2010-08-17
  • 打赏
  • 举报
回复
静态方法和实例方法是一样的,在类型第一次被使用时加载。调用的速度基本上没有差别。
静态方法不用创建实例就可调用,比较简单从面向对象的角度上来说,在抉择使用实例化方法或静态方法时,应该根据是否该方法和实例化对象具有逻辑上的相关性,如果是就应该使用实例化对象 反之使用静态方法。这只是从面向对象角度上来说的。
如果从线程安全、性能、兼容性上来看 也是选用实例化方法为宜。

少用静态变量
zhang1struts1yun 2010-08-17
  • 打赏
  • 举报
回复
静态的不用实例化,非静态就要实例化,
Peter200694013 2010-08-17
  • 打赏
  • 举报
回复
静态成员是类级别的,会出现上边那些情况...
一些共享数据就有可能“脏数据”
rwm5366745 2010-08-17
  • 打赏
  • 举报
回复
对呀 所以讲静态变量是共享的
静态变量会在页面关闭时才释放 也就是讲只要这个页面打开着 那么大家都共用这个变量
1,静态方法和静态变量是只属于原始类的
2,在内存上永远只有一份拷贝(原始类中),不会随着新建此类的对象而产生
3,所以只要有访问权限,在任何地方, 不需要实例化就可以用 类名.方法名() 来访问

static public bool ExistsFile(string FileName)
{
return File.Exists(FileName);
}
这个方法虽是静态的方法 但他的参数非静态变量 而是这个方法的局部变量
所以不会出现共享的结果 因为参数在变
panbaotong120 2010-08-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 rwm5366745 的回复:]

类的静态方法,静态变量是在类装载的时候装载的。但是要特别注意,类的静态变量是该类的对象所共有的,即是所有对象共享变量。所以建议尽量少用静态变量。尽量在静态方法中使用内部变量。
静态方法可在 访问这个方法时不需要实例化对象的情况下使用
[/Quote]
谢谢你的回答,我知道有时候静态变量会产生一些并不是自己想要的结点,举个例子来说:
有一个按钮单击事件
private static int count = 0;//声明一个静态计数变量
protected void Button1_Click(object sender, EventArgs e)
{
count++;
Label2.Text = count.ToString();
}
当我单击按钮一次的时候,我希望Label文本显示的是1(如果只有我一个人在操作,结果是正确的)
如果同时有另一个人也单击按钮,他也只击了一次,他希望看到的结果也是1,但是因为我之前已经单击过1次了,这个时候文本显示的结果是2(这个我已经做过测试了)

静态方法是否也会出现这样意想不到的结果呢?比如:
/// <summary>
/// 判断文件是否存在
/// </summary>
/// <param name="FileName"></param>
/// <returns></returns>
static public bool ExistsFile(string FileName)
{
return File.Exists(FileName);
}
我给他传的文件名是一个普通的变量,但是判断的方法是静态方法
他会不会也出现这种意想不到的结果呢?请帮忙回答一下
qinzhuhua 2010-08-17
  • 打赏
  • 举报
回复
路过....
对于静态变量,静态方法一直都弄不清楚
rwm5366745 2010-08-17
  • 打赏
  • 举报
回复
静态变量 可以在这个变量的值是共享的(如 连接数据库的字符串)且在页面的生命周期长或 页面关闭的情况下才释放的 变量可用静态变量
rwm5366745 2010-08-17
  • 打赏
  • 举报
回复
类的静态方法,静态变量是在类装载的时候装载的。但是要特别注意,类的静态变量是该类的对象所共有的,即是所有对象共享变量。所以建议尽量少用静态变量。尽量在静态方法中使用内部变量。
静态方法可在 访问这个方法时不需要实例化对象的情况下使用
rwm5366745 2010-08-17
  • 打赏
  • 举报
回复
静态变量(static)是相对自动变量(auto)等而言的,一旦声明为静态变量,在编译时刻开始永远存在,不受作用域范围约束。 如果多人同时访问 就会共享这个静态变量

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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