C#和Visual Basic漸行漸遠之匿名型別
在VB.NET和C#第一次被髮布時,很多人認為它們只是在語法和一些小的方面不一樣的相同語言而已。但隨著時間的推移,它們(C#和VB)之間的不同越來越明顯,比如對匿名型別(Anonymous Type)的處理就有著天壤之別。
為了支援類似雜湊表的資料結構和像分組這樣的查詢操作,由LINQ建立的匿名型別必須提供穩定的雜湊碼。而雜湊碼通常是由物件裡的欄位(Field)來建立的。
早期的匿名型別版本是不穩定的。換句話說,物件所包含的值可能會改變。而改變那些值的同時也改變了雜湊碼,然後會破壞一些雜湊表或者恰好儲存了物件的字典。
C#團隊使得匿名型別穩定下來。如果物件不能被改變,那麼雜湊碼也永遠不變。通常這些穩定的型別規則被放在非預設的構造器(Constructor)和只有Getter的屬性(Property)裡。
而VB團隊卻不想放棄修改匿名類的功能。Paul Vick這樣寫到:
儘管是有這樣的問題存在,我們不想在潑水的時候把孩子也扔掉。現在匿名型別某種程度上是受限的,因為它們不能被命名,但是將來你可以用繫結來應用它們,甚至在它們被宣告的上下文(Context)外面。現在我們在努力的一些新特性,比如有名字的匿名型別(Nominal Anonymous Type)和動態介面,將來會使匿名型別更加有用。本身而言,要使匿名型別穩定下來是不可想象的,特別是因為這會導致只有一條險徑可走——也就是一旦它們穩定了,在未來的某個時候,相容性會使它想要再不穩定變得異常困難,如果它們想要這麼做的話。
VB團隊選擇了一個相對複雜的方案,但這會給開發者更多的靈活性。當建立匿名型別時,程式設計師可以用關鍵詞“Key”表示那些欄位是穩定的。另外要使屬性只讀的話,雜湊碼函式會只用那些Key欄位產生雜湊碼。結果就是雜湊碼保證是穩定的。而且在被條件子句(Clause)用在聯合(Join)和分組(Group)裡時,欄位可以被編譯器自動地標識成Key。
VB和C#之所以能不同的實現方式是因為匿名型別是一個編譯器特性。CLR自己對匿名型別沒有什麼概念,只是把它們看作有著自動產生名字的普通類。
和VB其他的語法一樣,這個功能在Orcas Beta 2版本中才會提供。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-582438/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C#和Visual Basic之匿名型別C#型別
- 她漸行漸遠
- 緬懷那些正漸行漸遠的程式語言
- 用Visual C++實現圖象漸顯和漸隱 (轉)C++
- 小菜雞?面試の初體驗,自閉路上漸行漸遠......?♂️面試
- 快播的江湖漸行漸遠:影片行業進入付費時代行業
- 枯燥無味的遊戲流程,漸行漸遠的關卡設計遊戲
- 循序漸進理解TypeScript型別模式TypeScript型別模式
- 邊緣化的A股遊戲行業:在衰落的道路上,漸行漸遠遊戲行業
- 庫克與賈伯斯漸行漸遠?戳穿陰謀論的4種方式
- 盤點中國自動駕駛企業:漸行漸近與任重道遠!自動駕駛
- 徐白淺談:不要讓賭博與自己的人生目標, 漸行漸遠。
- 那個寫下人工智慧聖經《集異璧》的人,為何漸行漸遠?人工智慧
- 特性(C# 和 Visual Basic) BASIC 快速建模特性的程式語言C#
- CSS3線性漸變和徑向漸變CSSS3
- 用VC 實現圖象漸顯和漸隱 (轉)
- C#特性-匿名型別與隱式型別區域性變數C#型別變數
- canvas繪製小球漸隱漸現Canvas
- 匿名型別是不是強型別?型別
- 使用canvas來完成線性漸變和徑向漸變的功能Canvas
- css3實現的文字顏色漸變和漸隱效果CSSS3
- 為了保護環境,遊戲行業正在逐漸遠離塑料遊戲行業
- jquery漸隱漸現程式碼例項jQuery
- 【C#之值型別vs引用型別】C#型別
- 外掛製作--------過NP技術漸漸
- Linux循序漸進(21):別名(轉)Linux
- Visual Basic for ApplicationAPP
- 系統漸漸淪為“屎山”,原因是..
- c#中值型別和引用型別的區別C#型別
- 使用C#的後端Web API:循序漸進教程後端WebAPI
- css奇技淫巧-色彩漸變與動態漸變CSS
- WePack —— 助力企業漸進式 DevOps 轉型dev
- CSS背景漸變CSS
- Swift 漸變 imageSwift
- CSS 背景漸變CSS
- Docker循序漸進Docker
- Docker漸入佳境Docker
- css 字型漸變CSS