.net中类的设计,使用静态方法好吗?

towhereto 2005-09-30 10:29:22
如:使用静态方法类
public class Test{
public Test(){}
public static int Add()
{
//....
return 1;
}
}

调用时,只一条语句,非常简单
Test.Add();

非静态的方法
public class Test2 {
public Test2(){}
public int Add()
{
//....
return 1;
}
}
调用时
Test2 cls = new Test2();
cls.Add();

在一些系统中使用了好多静态方法,大家能否说明一下优缺点呢?
...全文
935 28 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
chouf 2006-06-27
  • 打赏
  • 举报
回复
静态方法所占用的内存得不到及时的回收

rghwer 2006-02-18
  • 打赏
  • 举报
回复
多用户同时操作 只是根静态变量有关系 ,静态方法只是一段代码 和你的用户有什么关系????
要搞清楚静态变量和静态方法!
wenl 2005-10-02
  • 打赏
  • 举报
回复
少用静态变量/方法,多用户同时操作时肯定要出问题。
engine198473 2005-10-01
  • 打赏
  • 举报
回复
建议楼主看看微软提供的访问数据库的类库SqlHelper.cs那里面都是静态方法。
总之是不用实例化,拿来就用:)
ttjacky 2005-10-01
  • 打赏
  • 举报
回复
关键还是看你的类是设计用来做什么
ghchen 2005-10-01
  • 打赏
  • 举报
回复
我觉得在这方面没有什么好讨论的,这两种方法在某些方面提供的功能都是相同,关键还是看你的类是设计用来做什么,用静态变量有时候确实简洁了调用写法,但不是所有情况都是这样,这要看用户怎样用你的类,我们应该更关注之间的异同,可以实现很多微妙的功能
hackate 2005-10-01
  • 打赏
  • 举报
回复
回复人: sp1234(过节啦,大家放假) ( ) 信誉:100
==============
每每都见到你在回答理论问题,理论真是够扎实啊.汗..
  • 打赏
  • 举报
回复
亦正亦偏,道法自然。设计软件本来是个创意性的活动,不要过于学究气。
  • 打赏
  • 举报
回复
static就是放弃面向对象方法吗?那JDK里也有很多static方法阿
------------------------------------------------------------
不要故意用少儿的方法去抬杠呀,谁说用了static那么整个体系就是放弃面向对象了呢?static用于处理的是体系中琐碎的,被认为不需要OOP的计算机领域对象。
xilo 2005-10-01
  • 打赏
  • 举报
回复
mark
  • 打赏
  • 举报
回复
不论是否 static,方法函数都与 assembly 一同调入内存,并于具体的类型对象一同保存,没有什么调用效率之差,即使有也不不过是几个汇编代码指令之间的差别,吃一顿饭的过程中你一定不会因为担心不小心多吃几粒米而放弃吃饭。

static就是放弃面向对象方法,不使用实例化了的对象去调用,因而方法是个结构化的函数库。这是为了人们使用OOP编程语言又想使用比较低级的函数组织方法的需要而保留的。只有很少的方法、最琐碎的纯粹计算机领域知识的方法需要它。如果你的比较实用,90%以上的方法都是基于对象的,在分析、设计和编码方面都会从对象角度去考虑,剩下一点琐碎的与业务无关的底层代码使用结构化方法优势更简单一点。
gdami 2005-09-30
  • 打赏
  • 举报
回复
我觉得静态方法代表共性,实例方法代表个性, 看你要用到什么方面。
heatwin 2005-09-30
  • 打赏
  • 举报
回复
静态方法在启动后就存放在内存里,故调用时效率相对较高(当然也会一直占用内存了),而非静态方法则是存放在堆里。


晕,我也不知道说得对不对,好久好久以前学的
xuwenzhuo 2005-09-30
  • 打赏
  • 举报
回复
你可以使用Singleton模式
private static AppStartMgr mInstance = null;

/// <summary>
/// 获得Singleton实例
/// </summary>
public static AppStartMgr fInstance()
{
if (mInstance == null)
{
mInstance = new AppStartMgr();
}
return mInstance;
}
其他方法为非静态方法。
3tzjq 2005-09-30
  • 打赏
  • 举报
回复
严重不同意楼上见解!
rtdb 2005-09-30
  • 打赏
  • 举报
回复
这根本不是方便不方便的问题,也与多用户无关, 而是其语义不同。

比如说你的这个TEST类是一个帐号,调用Add()为其加值, 那么这个Add()就不可能是静态方法。

所谓的静态方法,就是与对象实例无关的方法,有点象面向过程的函数,
在面向对象的环境下,一般只有很少的情况才需要用静态方法。
豌豆干 2005-09-30
  • 打赏
  • 举报
回复
我在系统中使用statc的时候较少
powerllr 2005-09-30
  • 打赏
  • 举报
回复
楼上说得是:
静态最好是比较通用的。多用户使用的同一个东东。比如一个Connection 等等。
记录用户名的变量就不能用静态的了。
3tzjq 2005-09-30
  • 打赏
  • 举报
回复
一般其它类中都能用到的方法、函数....就设计成static,static的方法、函数....应尽量避免使用静态变量!
当然这也要看实际需求:
比如一个皮肤组件,Shared类中的一个静态属性:SkinStyle,它的返回值就应该是静态的,因为当此值更改后程序的所有窗体都要跟据此值重绘界面元素。
LoveCherry 2005-09-30
  • 打赏
  • 举报
回复
静态方法一般用于工具性质的类
加载更多回复(8)

62,242

社区成员

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

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

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

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