少有人走的路

勇哥的工业自动化技术网站

从oop的角度考虑在C#中什么时候使用static为好呢?

因为勇哥看到一份代码,作者为了方便一个类能被任何其它类随时调用,把这全部成员变与方法都定义为static。

感觉很怪异,于是抽点时间仔细考虑了一下为啥这样不妥当,罗列几条如下:



是否使用静态,相信大家肯定知道静态与实例方法的调用区别:一个是类型调用,一个是实例调用。

个人建议更应该从OOP的角度思考这个问题:什么样的行为是需要具体的对象去执行的,什么样的行为是某一个类型/类别拥有的?


举个例子:每个人都有自己的姓名、工作方式、成长经历这些实例属性或方法。

人类的历史或者说发展史是由每个人组成,但却不是属于具体某个人的,而是整个人类的。这种场景就可能需要考虑到用静态去描述。


具体一点:System.Net.WebRequest类的Create方法,不管子类是HttpWebRequest还是FtpWebRequest,只要是这种类型都有一种Create请求的行为。所以将该方法设计为类型的静态方法(而不是父类上的实例方法)。

至于创建出来的WebRequest到底是Http还是Ftp,这个根据你传入的url参数内部处理好了,不用关心。


还可以注意到的一点是WebRequest父类是抽象的,或者会对大家更有启发。


另外,静态方法并不是线种安全的。使用静态方法,还需要考虑多线程环境下对资源操作的原子性处理。



因此,这种全部使用static的做法,其实如果从实现功能上来讲没啥问题。但是违背oop的设计原则,变成了一种过程式编程的方式, 

oop的继承、封装、多态特性会一样都用不上。


  • 评论列表
  •  访客
     发布于 2020-03-28 22:44:50  回复该评论
  • 不用静态的类和变量有什么更好的解决办法呢?勇哥
    •  勇哥,很想停止
       发布于 2020-03-31 09:43:12  回复该评论
    • 用静态类静态方法,确实让编程更容易。不是不让用这个,而应该坚持向OOP的思想靠拢,自然就知道何时该何时不该用。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2025年11月    »
12
3456789
10111213141516
17181920212223
24252627282930
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接

Powered By Z-BlogPHP 1.7.3

Copyright www.skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864