惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
G
Google Developers Blog
B
Blog
Engineering at Meta
Engineering at Meta
阮一峰的网络日志
阮一峰的网络日志
The Register - Security
The Register - Security
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 叶小钗
The Cloudflare Blog
The Hacker News
The Hacker News
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
雷峰网
雷峰网
F
Fortinet All Blogs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
H
Hackread – Cybersecurity News, Data Breaches, AI and More
酷 壳 – CoolShell
酷 壳 – CoolShell
Last Week in AI
Last Week in AI
T
Threat Research - Cisco Blogs
A
About on SuperTechFans
量子位
Recorded Future
Recorded Future
博客园 - 三生石上(FineUI控件)
H
Help Net Security
Help Net Security
Help Net Security
P
Palo Alto Networks Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
T
Troy Hunt's Blog
W
WeLiveSecurity
V
Vulnerabilities – Threatpost
T
The Exploit Database - CXSecurity.com
Know Your Adversary
Know Your Adversary
Apple Machine Learning Research
Apple Machine Learning Research
Scott Helme
Scott Helme
N
News | PayPal Newsroom
AWS News Blog
AWS News Blog
D
DataBreaches.Net
Blog — PlanetScale
Blog — PlanetScale
MongoDB | Blog
MongoDB | Blog
B
Blog RSS Feed
腾讯CDC
J
Java Code Geeks
Microsoft Azure Blog
Microsoft Azure Blog
TaoSecurity Blog
TaoSecurity Blog
GbyAI
GbyAI
Y
Y Combinator Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
D
Docker

博客园 - 深山老林

测试Varnish缓存服务器与IIS连接数 谈谈持续集成 亲测SQLServer的最大连接数 读书笔记:Oracle锁定策略的总结 jQuery formValidator不支持新版手机的解决办法 TFS Workspace错误解决办法 Mindjet.MindManager.v9.0“参数错误”解决办法 c#3.0提供的扩展方法 Entityframework提供的处理并发冲突方式 ASP.NET MVC2中返回Json异常的解决办法 Visual studio 配置文件下载 WF之基本概念 数据库访问的性能问题与瓶颈问题 SQLServer中批量插入数据方式的性能对比 再次探扩展-对xVal进行扩展解决验证不同步的问题 微软并行编程类库Parallel Extensions介绍 更改Outlook数据文件的路径 再次探讨企业级开发中的Try......Catch性能问题 在企业级开发中使用Try...Catch...会影响效率吗?
谈谈c#中的static
深山老林 · 2009-12-18 · via 博客园 - 深山老林

static关键字大家肯定是用的很多了,说起来大家也都知道,这有什么好谈的?

可是回想起以前的一些事情,不免叫我心中......

事情起因,一个项目中的一些类中全部都是方法,但是被设计成了非静态类了。于是我为了说服同事将这些类设计成静态的,下了好大的力度。等同事明白过来以后,我已疲惫不堪。

不知道您是否存在以下观点?

  1. static是从面向过程到面向对象的遗留产物,以往开发都是面向过程的,所以很多使用了静态类、静态方法,到了面向对象以后,这个关键字被保留下来了。因此面向对象开发中最好不用或少用static关键字。
  2. 无论是静态类还是非静态类,效果都是一样的,没什么区别。
  3. 如果你非要让我使用静态类,那么这样做的意义在哪里?
  4. 如果我把非静态类该为静态类,那么会不会有什么问题?

下面针对以上的一些观点,笔者阐述下自己的理解,如果哪里有写的不对的地方,还请指出。

  1. static关键字的确是面向过程开发的时代就有的关键字,但是并不代表是面向对象开发中就应该尽量避免static关键字。
  2. 静态类跟非静态类效果肯定是不一样的,区别肯定是有的。
  3. 根据笔者的经验,static类一般用于与状态无关的类。那么,什么是与状态无关的类?我的理解是当一个类中没有属性,只有方法的的时候,就可以认为这个类是与状态无关的类。回想非静态类实例化一个对象,目的在什么地方?目的就是通过这个实例化的对象来保存类的状态。
    不是吗?例如
    A a = new A();
    a.Name = "Kevin";
    a.Sex = "男";
    ......
    通过我们实例化的对象a,类的状态被对象a保持住了。
    如果我们的类没有属性,全是方法,那么,有必要为了调用类中的方法,先实例化一个对象出来吗?
    因此,笔者建议,在做类的设计的时候,如果类是与状态无关的类,建议将其设计为static类。
    至于说这样做的意义:首先,省略了构造一个对象的性能损耗,虽然可以忽略不计。其次,对程序员比较友好,调用类的方法更加的方便。
  4. 只要一个类是与状态类无关的类,那么将其设计成静态类是没有问题的。
    对于以上的一些观点,纯属个人经验之谈。如果您有不同的观点,欢迎共同交流。