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

推荐订阅源

Cisco Talos Blog
Cisco Talos Blog
阮一峰的网络日志
阮一峰的网络日志
云风的 BLOG
云风的 BLOG
D
Docker
Vercel News
Vercel News
IT之家
IT之家
Recent Announcements
Recent Announcements
Last Week in AI
Last Week in AI
V
Visual Studio Blog
Engineering at Meta
Engineering at Meta
腾讯CDC
Google DeepMind News
Google DeepMind News
I
InfoQ
博客园 - 三生石上(FineUI控件)
Apple Machine Learning Research
Apple Machine Learning Research
The GitHub Blog
The GitHub Blog
博客园 - Franky
The Cloudflare Blog
A
About on SuperTechFans
有赞技术团队
有赞技术团队
Y
Y Combinator Blog
T
Tenable Blog
P
Proofpoint News Feed
Recorded Future
Recorded Future
Security Latest
Security Latest
H
Hackread – Cybersecurity News, Data Breaches, AI and More
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
博客园 - 聂微东
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Google Online Security Blog
Google Online Security Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Simon Willison's Weblog
Simon Willison's Weblog
The Last Watchdog
The Last Watchdog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
N
News and Events Feed by Topic
TaoSecurity Blog
TaoSecurity Blog
U
Unit 42
The Hacker News
The Hacker News
Martin Fowler
Martin Fowler
T
Threat Research - Cisco Blogs
NISL@THU
NISL@THU
F
Full Disclosure
M
MIT News - Artificial intelligence
人人都是产品经理
人人都是产品经理
Hugging Face - Blog
Hugging Face - Blog
V
V2EX
Project Zero
Project Zero

博客园 - jierry

ASP.NET2.0控件一览---标准控件(2) ASP.NET2.0控件一览---标准控件(1) 控件开发时两种JS嵌入资源方式的使用 - jierry - 博客园 T-SQL tips(1)临时表和表变量 Flash Control for ASP.NET 2.0-Include Flash movies in your aspx pages 为DataGrid创建自定义列控件(四) 为DataGrid创建自定义列控件(三) - jierry - 博客园 为DataGrid创建自定义列控件(二) 为DataGrid创建自定义列控件(一) (转)SQLServer和Oracle的常用函数对比 《Effective C#》读书笔记(4) 《Effective C#》读书笔记(3) 《Effective C#》读书笔记(2) 选择合适的数据控件 自带图层的链接控件(DKLinks 1.0.0.323 ) 关于CodeBuild V3.0的一些想法 小工具:SQL存储过程解密修改工具 交叉表应用-成绩统计 现在提供第一版的存储过程生成器下载,欢迎大家试用
《Effective C#》读书笔记(1)
jierry · 2005-08-07 · via 博客园 - jierry

        Bill Wagner先生的《Effective C#》一书保持作者一贯的风格,很值得我们一读。很早就想把读此书的感想写出来,一直没有时间,最近总算比较轻闲,借此写出读此书的心得,水平有限,希望对大家有所帮助

        Item 1: Always Use Properties Instead of Accessible Data Members
        第一项:永远使用属性而不要直接访问数据成员
        说到属性,大家肯定都知道。
        比如:        

        class Person
        { 
              
private string name; 
              
public string Name 
               { 
                  
get { return this.name;} 
                  
set { this.name=value;} 
               } 
        }

        具体属性能给我们带来什么好处呢?为什么必须使用属性来访问而不直接使用public来访问呢?这些肯定是大家最想知道的。 
        
        在本Item中,介绍了使用属性可以为我们带来以下的好处。 

1、对赋值进行校验或者其他的处理。
        2、遵守封装原则。
        3、便于做线程同步访问。
        4、支持虚属性、抽象属性,并且可以在接口中使用。
        5、在C#2.0中,属性的get,set方法将支持不同的访问权限。

        那我们为什么要使代码复杂话来使用属性,而不直接使用public来访问,这样不是简单的多吗?不少人都有这样的疑惑。让我们来
看看通过属性访问和public来访问有什么区别。
        
        首先来看看使用public访问,当我们建立类的实例后,这时将会为public的字段分配动态内存。
        
        而通过属性访问,在定义1个属性的时候,编译器会在生成的托管模块中产生以下3项:
        ·1个表示属性的get访问器的方法,只有定义了get访问器方法才会创建
        ·1个表示属性的set访问器的方法,只有定义了set访问器方法才会创建
        ·1个位于托管模块元数据中的属性定义。

        在我们使用属性的时候,Get and Set都被标注为

hidebysig, specialname。也就是说它们不能被C#源代码直接调用,它们也不是正是的类
型定义。你只能通过
Property来访问它们。JIT编译器会将属性访问的代码进行内联(inline)处理,这样使用属性时就不会再有运行时的性
能损失(相对与字段访问来讲)。但要注意的是,只有对那些执行时间比较短的操作我们才应该使用属性,而对于执行时间长的就应该使
用方法。

        PS:内联是指将1个方法内的代码直接编译到调用它们的方法中,从而消除调用方法时的运行负担,但它的代价时编译后的方法代码

变得比较庞大。由于属性的访问器方法通常含有比较少的代码,所以内联它们会使代码变得更小,执行效率更高!