在寫博文介紹WCF的Contract的時候,突然發現有幾個C#的小概念需要提一下。否則容易讓別人聽迷糊的。所以,就單獨列出來了這篇。
第一組:Attribute,property,field
這一組概念好多人會覺得是一個意思。其實,在C#中,他們指代完全不同的內容。
1 [Serializable] 2 class Person 3 { 4 private string name; 5 6 public string Name 7 { 8 get 9 { 10 return this.name; 11 } 12 set 13 { 14 if (!string.IsNullOrEmpty(value)) 15 { 16 this.name = value; 17 } 18 } 19 20 } 21 22 public int Age { get; set; } 23 24 }
注:第一行:[] 中括號內的叫做Attribute.這個怎么翻譯呢?有人翻譯為“特性”。我覺得還是不翻譯的好,還叫它Attribute吧,呵呵。Attribute是用來修飾Class、Interface、method的,放在class、interface、method定義的上一行。Serializable是系統內已經定義好的"Attribute類",用語修飾其他class、interface、method。[Serializable]修飾一個Class表明該class(類) new出來的的object(對象)可以被序列化成XML。XML可以被反序列化成object(對象)。可以定義自己的"Attribute類"去修飾其他class/interface。這里不多講,只要知道Attribute是位於class上面一行的中括號內的就行了。
第四行:private string name;這里name叫做field。有人翻譯為“字段”。個人認為不恰當,還是保留叫做field吧,呵呵。其實就是C++中所謂的私有變量了。field因為是private,所以不可在class外被訪問。
第六行至第20行:叫做property。有人翻譯為“屬性”。個人還是認為還是保留Property。property 提供了外界訪問field的一個簡易方法。這里可以做簡單的條件過濾等。如果property體內只有Get{},而沒有Set{},則該property/field就是只讀了。
第22行:一般情況下我們會為filed定義一個property以利於外界的訪問。 C#也允許我們之定義property,而不必寫field,如Age。在編譯時,CLR會自動替我們生成field的。
第二組:Function & Method(Operation)
一般function都被翻譯成"函數",method都被翻譯成"方法"吧?
我覺主要是從他們所表達的側重不同進行區分他們. 腳本語言如C,Perl,PHP,Python,powershell,unix bash等,好像用function比較多.而在C#,Java等語言中method用得比較多.個人感覺
function是不需要依賴於class(類)或object(對象)的,相對於腳本中的普通語句(未被提取成function的語句)而言的;
method依賴於某個class /object,相對class中的property而言的.
operation我覺得和method是一個概念,都是在某了對象上面做的操作.
=====================================================================================
先寫這些吧,以后遇到概念再需要單獨拿出來澄清的時候,在追加。