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

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

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



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

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


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

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


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

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


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


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



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

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


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:
  • 评论列表:
  •  访客
     发布于 2020-03-28 22:44:50  回复该评论
  • 不用静态的类和变量有什么更好的解决办法呢?勇哥
    •  勇哥,很想停止
       发布于 2020-03-31 09:43:12  回复该评论
    • 用静态类静态方法,确实让编程更容易。不是不让用这个,而应该坚持向OOP的思想靠拢,自然就知道何时该何时不该用。

发表评论:

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

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864