因为勇哥看到一份代码,作者为了方便一个类能被任何其它类随时调用,把这全部成员变与方法都定义为static。
感觉很怪异,于是抽点时间仔细考虑了一下为啥这样不妥当,罗列几条如下:
是否使用静态,相信大家肯定知道静态与实例方法的调用区别:一个是类型调用,一个是实例调用。
个人建议更应该从OOP的角度思考这个问题:什么样的行为是需要具体的对象去执行的,什么样的行为是某一个类型/类别拥有的?
举个例子:每个人都有自己的姓名、工作方式、成长经历这些实例属性或方法。
人类的历史或者说发展史是由每个人组成,但却不是属于具体某个人的,而是整个人类的。这种场景就可能需要考虑到用静态去描述。
具体一点:System.Net.WebRequest类的Create方法,不管子类是HttpWebRequest还是FtpWebRequest,只要是这种类型都有一种Create请求的行为。所以将该方法设计为类型的静态方法(而不是父类上的实例方法)。
至于创建出来的WebRequest到底是Http还是Ftp,这个根据你传入的url参数内部处理好了,不用关心。
还可以注意到的一点是WebRequest父类是抽象的,或者会对大家更有启发。
另外,静态方法并不是线种安全的。使用静态方法,还需要考虑多线程环境下对资源操作的原子性处理。
因此,这种全部使用static的做法,其实如果从实现功能上来讲没啥问题。但是违背oop的设计原则,变成了一种过程式编程的方式,
oop的继承、封装、多态特性会一样都用不上。

