C#語法比擬其它說話比擬奇特的處所(一)。本站提示廣大學習愛好者:(C#語法比擬其它說話比擬奇特的處所(一))文章只能為提供參考,不一定能成為您想要的結果。以下是C#語法比擬其它說話比擬奇特的處所(一)正文
因為c#是由設計.net自己的人設計出來的,所以c#才是.net上最一流的說話。
現實上,曾經有一百多萬行c#代碼用於完成.Net class framework。
要施展出.net平台全體的效能,只要c#才是首選。
1,switch語句可以用來測試string型的對象
這在c,c++,java等其他各主流說話中都是弗成以的,惟獨c#可以。
例如string a="haha";
switch(a)
{
case "dfj":
...
break;
case "djkfdjkf":
....
break;
case "haha":
.....
break;
default:
....
}
2、多維數組
這也是c#的特點,像java也沒有多維數組,只要數組的數組。
c#中不只稀有組的數組,也有多維數組。
數組的數組的特色是(拿二維為例),每行的元素個數可以分歧。
好比int [][] c=new int[2][];
c[0]={3,4,5,6};
c[1]={1};
c#中的多維數組的情勢是如許界說
int [,] c=new int[3,4];
如許的c就是一個三行四列的二維數組。
3,as與is
java中也有相似於is的語法,用於在運轉時斷定一個對象的類型,叫做instanceof。
c#中就是一個is,斷定o是否是一個string: o is string
as則是一個很窩心的功效,它起首對這個對象停止斷定能否是某品種型,假如是就停止類
型轉換,假如不是,就前往null。
如: o as string
4,foreach語句
java5今後for語句就多了foreach功效,這或許就是由於之前沒有,而c#有,使得本身異常妒忌,所以立時給添上了。
c#中的foreach功效長短常便利的。
例如遍歷一個數組
string[] sentences=...;
foreach(string st in sentences)
{
....
}
5,索引器和Property
不能不認可,我的偶像Anders完成出來的c#確切異常優良。
我把索引器和Property歸為一類。
都是從Class中讀取某種屬性,假如曉得java的POJO的人確定曉得,java bean的尺度情勢
就是一堆private屬性,然後一個getter,一個setter,這是尺度,但完成確切應用的通俗成員辦法。
c#則更絕,它直接在Class中聲明一個零丁的field,然後在語法中直接設計了getter和setter的簡化寫法,這就是我們熟知的Property。
如:
public class WordCount
{
private string m_string;
public string OutFile
{
get{...}
set{...value...}
}
}
如許真正做到了關閉修改,開放擴大。
然後就是索引器,我認為java中只要EL才有點做出了相似索引器的功效,這也只是便利了寫jsp的人,並且許多廠商竟然不在本身的容器中包括EL解析,這不能不讓sun很無法。
索引器就是給幾個參數,前往一個屬性。
如:
public int this[string index]
{
get{...}
set{..value}
}
public int this[int x,int y]
{
get{}
set{..value}
}
6,const和readonly
這點c#讓我有點掉望,關於非Ref型就是const,關於Ref型就是readonly。
而在java中,一個final就好了。固然關於弗成繼續的類,c#又有一個症結字sealed,固然這讓法式的寄義更明白,但確切也多記了好幾個症結字。
7,delegate型別
說真話,這類奇異的語法照樣第一次見到,說跟C++中重載operator()的功效像吧,又不是太像。
總而言之,認為它完成能夠就是記下一堆同類型的函數指針,然後可以順次挪用罷了。
起首須要聲明一個delegate型別,留意是型別而不是對象。
如public delegate void Action();
留意既然是型別,那就跟enum,class是一致的,留意型別可以或許湧現的地位。
然後我們便可以界說這類型其余對象來應用了。
Action aaa=new Action(...);
這個...代表的是相符這類函數本相的函數名字,留意應用delegate機制來挪用,和直接挪用函數實質上沒有甚麼分歧,就是說,當你挪用成員函數的時刻,固然你須要有一個對象,而挪用靜態函數的時刻,你可以直接應用類名了。
這類delegate型別對象還有點特別,它可使用運算符+=和-=來增長或許削減本對象所代
理的函數集,固然還有更多的辦法用來看以後我署理了若干個函數之類的。
aaa+=new Action(xxx);
aaa+=new Action(ooo);
然後aaa(),意味著次序挪用xxx和ooo。
aaa.GetInvocationList().length可以看到以後署理了若干個函數。
你不消擔憂署理的通俗成員函數的所屬對象會被渣滓收受接管器收受接管,直到此署理對象不再援用這個函數,固然這個也是壞新聞,說不定你都忘了還有某個署理對象署理著要逝世的對象的函數,讓這個對象老不逝世。