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

描述C# Anonymous Type

開發(fā) 后端
這里介紹C# Anonymous Type Overview在傳統(tǒng)的編程模式中,對象依賴于一個(gè)既定的Type,我們只能在Type的基礎(chǔ)上創(chuàng)建相應(yīng)的Instance。

在C#2.0中,引入了一個(gè)新的Feature:Anonymous Method,允許我們已Inline的方式來定義Delegate,為Developer在Coding的時(shí)候帶來了很大的便利。在C#3.0中,我們又有了另一個(gè)相似的Feature:Anonymous Type。Anonymous Type允許我們已Inline的方式的創(chuàng)建一個(gè)基于未知類型、具有所需數(shù)據(jù)結(jié)構(gòu)的對象。

C# Anonymous Type Overview在傳統(tǒng)的編程模式中,對象依賴于一個(gè)既定的Type,我們只能在Type的基礎(chǔ)上創(chuàng)建相應(yīng)的Instance。比如如果我們需要創(chuàng)建一個(gè)Employee Instance,前提是我們已經(jīng)有了一個(gè)相應(yīng)的Emplyee Type的定義。比如:

  1. publicclassEmployee  
  2. {  
  3. privateGuid_id;  
  4. privatestring_name;  
  5.  
  6. publicGuidID  
  7. {  
  8. get{return_id;}  
  9. set{_id=value;}  
  10. }  
  11.  
  12. publicstringName  
  13. {  
  14. get{return_name;}  
  15. set{_name=value;}  
  16. }  

有了這樣一個(gè)Employee Type,我們才可以創(chuàng)建相應(yīng)的Employee Instance。

var v = new Employee{ ID = Guid.NewGuid(), Name = "Zhang San" };
注:在上面的Code中,實(shí)際上使用到了另外兩個(gè)C# 3.0的new feature: Implicitly typed local variable & Object Initializer.

這樣基于一個(gè)預(yù)先定義的Type的對象創(chuàng)建方式的一個(gè)最大的限制就是:對于我們需要創(chuàng)建的每一個(gè)對象,我們必先定于該對象對應(yīng)的Type。Anonymous Type有效地解決了這個(gè)問題。我認(rèn)為Anonymous Type主要是基于下面的目的而設(shè)計(jì):

一個(gè)Type是對一個(gè)現(xiàn)實(shí)中實(shí)體的State(Data)和Behavior(Method)的抽象。對于一些僅僅只包含State(Data)的 Type(這樣對象通常作為Data Package在Application各個(gè)Layer之間、以及一個(gè)分布式環(huán)境中各個(gè)Application之間進(jìn)行數(shù)據(jù)的傳遞),我們關(guān)心的僅僅是這個(gè)由這些數(shù)據(jù)成員組成結(jié)構(gòu):Type由哪些數(shù)據(jù)成員構(gòu)成,它們的名稱是什么,具有怎樣的數(shù)據(jù)類型。換句話說,這樣的Data-based Type定義了一個(gè)Data Structure,相應(yīng)地,我們可以說一個(gè)固定的Data Structure對應(yīng)著一個(gè)特定的Type。而C# Anonymous Type就提供了這樣的實(shí)現(xiàn):Compiler通過我們在Source Code定義的數(shù)據(jù)成員的具體結(jié)構(gòu)為我們創(chuàng)建相應(yīng)的Type。

比如我們現(xiàn)在需要一個(gè)在上面定義的Employee對象,實(shí)際上我們不是需要的一個(gè)Type Name叫做Employee的對象,而是需要一個(gè)具有如下特征的對象:該對象具有兩個(gè)數(shù)據(jù)成員: ID & Name,他們的數(shù)據(jù)類型分別為GUID和string。在Source Code中,我們通過以下各結(jié)構(gòu)指定這種特征:var v = new{ID = Guid.NewGuid(), Name= "Zhang San" };
我們仔細(xì)分析上面這段代碼,實(shí)際上它包含兩部分的信息的:

為 Compiler Type的創(chuàng)建定義一個(gè)數(shù)據(jù)結(jié)構(gòu)。{}中的內(nèi)容指明了:包含兩個(gè)數(shù)據(jù)成員,第一個(gè)是名稱為ID,第二個(gè)為Name(成員的順序也是一個(gè)決定因素,也就是說 {ID = Name= "Zhang San" ,Guid.NewGuid()}和{ID = Guid.NewGuid(), Name= "Zhang San" }對于的Anonymous Type將是不同的。我不太清楚這樣的設(shè)計(jì)到底處于一個(gè)什么樣的目的);和Implicitly typed local variable一樣,成員的類型由指定的數(shù)據(jù)或者表達(dá)式計(jì)算結(jié)果的數(shù)據(jù)類型決定。

為在運(yùn)行時(shí)對象的創(chuàng)建提供數(shù)據(jù),就像Constructor的參數(shù)一樣。以上介紹C# Anonymous Type。

【編輯推薦】

  1. 淺析C# ArrayList
  2. C#對象初始化學(xué)習(xí)總結(jié)
  3. 使用C#正則表達(dá)式匹配相關(guān)字符串
  4. C#改寫方法學(xué)習(xí)筆記
  5. 概述C#加框和消框
責(zé)任編輯:佚名 來源: 博客園
相關(guān)推薦

2009-08-18 09:24:52

C# Anonymou

2009-08-17 16:47:51

C# Anonymou

2009-08-13 17:04:09

C#語言C#程序

2009-08-20 09:30:03

C#開發(fā)WinForm

2009-08-03 16:45:02

C#異步Socket

2009-08-03 18:08:39

C# ICloneab

2009-08-18 17:41:22

C# ListView

2009-08-26 17:49:36

C# readonly

2009-08-31 13:18:09

C# IWebMess

2009-08-31 18:32:01

C# ListBoxE

2009-08-19 10:09:21

C#和C++

2009-08-12 18:28:09

C#事件處理程序

2009-08-20 16:45:03

C#哈希值

2009-08-27 10:01:52

C#自動屬性

2009-09-01 17:08:35

C# Color枚舉

2009-09-03 16:55:58

C#引用類型

2009-09-07 15:31:49

C#支持事件

2009-09-07 13:02:52

Java和C#線程

2009-08-06 15:52:11

C#調(diào)用外部進(jìn)程

2009-08-21 15:27:11

C# DataGrid
點(diǎn)贊
收藏

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