自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

概述C#編譯器

開發(fā) 后端
本文介紹C#編譯器自動(dòng)的調(diào)用了List的無參構(gòu)造方法,然后實(shí)例化一個(gè)個(gè)的Book,再一個(gè)個(gè)的Add進(jìn)去,簡省了我們很多的編碼工作。

在寫一些實(shí)體類的時(shí)候,我們往往在寫構(gòu)造方法的時(shí)候思考很長時(shí)間,除了一個(gè)無參構(gòu)造器外還在想需要寫幾個(gè)構(gòu)造器呢?哪些參數(shù)是需要初始化的?,F(xiàn)在你再也不需要為這事煩惱了。C# 3.0為你提供了C#編譯器:

  1. publicclassBook  
  2. {  
  3. ///  
  4. ///圖書名稱  
  5. ///  
  6. publicstringTitle{get;set;}  
  7. ///  
  8. ///單價(jià)  
  9. ///  
  10. publicfloatPrice{get;set;}  
  11. ///  
  12. ///作者  
  13. ///  
  14. publicstringAuthor{get;set;}  
  15. ///  
  16. ///ISBN號(hào)  
  17. ///  
  18. publicstringISBN{get;set;}  
  19. }  
  20. //對象初始化器  
  21. Bookbook=newBook{Title="InsideCOM",ISBN="123-456-789"}; 

現(xiàn)在你想初始化幾個(gè)就初始化幾個(gè),不需要出現(xiàn)這種情況:

  1. public Book():this("")  
  2. {  
  3. }  
  4. public Book(string title):this(title,0)  
  5. {  
  6. }  
  7. public Book(string title, float price):this(title,price,"")  
  8. {  
  9. }  
  10. public Book(string title, float price, string isbn)  
  11. {  
  12. this.Title = title;  
  13. this.Price = price;  
  14. this.ISBN = isbn;  

這一串的構(gòu)造方法都是為了應(yīng)付不同的初始化情況。好了,來看看對象初始化器編譯器在后面為我們做了些什么呢?使用Reflector反編譯程序集:

  1. Book<>g__initLocal0=newBook();  
  2. <>g__initLocal0.Title="InsideCOM";  
  3. <>g__initLocal0.ISBN="123-456-789";  
  4. Bookbook=<>g__initLocal0; 

C#編譯器生成了一個(gè)新的局部變量g__initLocal0,調(diào)用Book的默認(rèn)無參構(gòu)造方法初始化它,然后對它的屬性進(jìn)行賦值,最后將這個(gè)局部變量賦值給book??吹竭@里,我們應(yīng)該想到,要使用對象初始化器,那么這個(gè)對象必須有一個(gè)無參構(gòu)造方法,如果你給這個(gè)方法寫了一個(gè)有參構(gòu)造方法而將它的默認(rèn)無參構(gòu)造方法覆蓋了并且沒有提供一個(gè)新的無參構(gòu)造方法,那么使用對象初始化器編譯的時(shí)候是不會(huì)通過的(不過想不通,為啥C#編譯器生成這么一個(gè)奇怪的局部變量名字,還有為啥不直接使用book呢)。像下面的代碼不更好:

  1. Bookbook=newBook();  
  2. book.Title="InsideCOM";  
  3. book.ISBN="123-456-789"

從上面的代碼來看,C#編譯器自動(dòng)的調(diào)用了List的無參構(gòu)造方法,然后實(shí)例化一個(gè)個(gè)的Book,再一個(gè)個(gè)的Add進(jìn)去,和我們原來的做法沒有什么不同,但是,這是編譯器為我們做的,所以簡省了我們很多的編碼工作。

對象集合初始化器就算介紹完了。有人也許會(huì)說,不就是個(gè)syntx sugar么,有什么。是的,確實(shí)是個(gè)語法糖。在編譯器發(fā)展早期,編譯器科學(xué)家門一直在想方設(shè)法的優(yōu)化編譯器生成的代碼,這個(gè)時(shí)候,編譯器做的主要是對機(jī)器優(yōu)化,因?yàn)槟莻€(gè)時(shí)候機(jī)器的時(shí)間非常寶貴,機(jī)器運(yùn)算速度也不快,今天我們有了足夠好的機(jī)器了(但并不是說我們可以不關(guān)注性能的編寫程序),而且作為編寫軟件的人來說,比機(jī)器的時(shí)間寶貴得多,所以今天的編譯器也在向人優(yōu)化了,從編程語言的發(fā)展之路來講,今天的編程語言比昨天的語言更高級(jí),也更人性化了,我們只要編寫更少的代碼,更符合人的思維的代碼,而只要關(guān)注我們值的關(guān)注的地方。體力活兒就交給C#編譯器吧。

【編輯推薦】

  1. 簡單介紹C#預(yù)處理
  2. 學(xué)習(xí)C#無詞尾符號(hào)經(jīng)驗(yàn)談
  3. C#調(diào)用QuickTest自動(dòng)化
  4. 詳解C#正規(guī)表達(dá)式
  5. C#字符串插入html標(biāo)簽
責(zé)任編輯:佚名 來源: 博客園
相關(guān)推薦

2009-08-06 14:59:36

C#編譯器

2009-08-14 11:34:26

Mono C#編譯器

2009-09-01 10:35:19

C# 3.0編譯器

2009-08-14 16:37:02

C# NGWS run

2010-01-18 10:34:21

C++編譯器

2010-01-21 09:11:38

C++編譯器

2009-08-18 11:27:56

配置C#命令行編譯器

2013-12-10 10:53:47

shellcode

2010-01-18 10:28:15

C++編譯器

2010-10-20 13:43:37

C++編譯器

2009-08-20 17:35:00

配置C#命令行編譯器

2010-01-12 16:42:59

C++編譯器

2010-01-14 15:29:44

C++編譯器

2010-02-03 13:14:03

C++編譯器命令

2010-06-04 17:37:45

Linux編程工具

2011-10-20 15:06:47

Project Ros

2012-06-06 09:04:54

Roslyn

2010-01-21 09:26:53

CC++編譯器

2010-01-27 16:39:48

C++編譯器

2011-10-20 09:50:14

C#
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)