亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#語法相比其它語言比較獨特的地方(一)

 更新時間:2015年04月10日 10:35:09   投稿:junjie  
這篇文章主要介紹了C#語法相比其它語言比較獨特的地方(一),本文講解了switch語句可以用來測試string型的對象、多維數(shù)組、foreach語句、索引器和Property等內(nèi)容,需要的朋友可以參考下

由于c#是由設計.net本身的人設計出來的,所以c#才是.net上最一流的語言。
實際上,已經(jīng)有一百多萬行c#代碼用于實現(xiàn).Net class framework。
要發(fā)揮出.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、多維數(shù)組

這也是c#的特色,像java也沒有多維數(shù)組,只有數(shù)組的數(shù)組。
c#中不但有數(shù)組的數(shù)組,也有多維數(shù)組。
數(shù)組的數(shù)組的特點是(拿二維為例),每一行的元素個數(shù)可以不同。
比如int [][] c=new int[2][];

復制代碼 代碼如下:

c[0]={3,4,5,6};
c[1]={1};

c#中的多維數(shù)組的形式是這樣定義
復制代碼 代碼如下:

int [,] c=new int[3,4];

這樣的c就是一個三行四列的二維數(shù)組。

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功能是非常方便的。

例如遍歷一個數(shù)組

復制代碼 代碼如下:

string[] sentences=...;
foreach(string st in sentences)
{
  ....
}

5,索引器和Property

不得不承認,我的偶像Anders實現(xiàn)出來的c#確實非常優(yōu)秀。
我把索引器和Property歸為一類。
都是從Class中讀取某種屬性,如果知道java的POJO的人肯定知道,java bean的標準形式
就是一堆private屬性,然后一個getter,一個setter,這是標準,但實現(xiàn)確實使用的普通成員方法。

c#則更絕,它直接在Class中聲明一個單獨的field,然后在語法中直接設計了getter和setter的簡化寫法,這就是我們熟知的Property。
如:

復制代碼 代碼如下:

public class WordCount
{
  private string m_string;
  public string OutFile
  {
     get{...}
     set{...value...}
  }
}

這樣真正做到了封閉改動,開放擴展。
然后就是索引器,我覺得java中只有EL才有點做出了類似索引器的功能,這也只是方便了寫jsp的人,而且很多廠商居然不在自己的容器中包含EL解析,這不得不讓sun很無奈。

索引器就是給幾個參數(shù),返回一個屬性。
如:

復制代碼 代碼如下:

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()的功能像吧,又不是太像。
總而言之,覺得它實現(xiàn)可能就是記下一堆同類型的函數(shù)指針,然后可以依次調(diào)用而已。
首先需要聲明一個delegate型別,注意是型別而不是對象。
如public delegate void Action();
注意既然是型別,那就跟enum,class是同等的,注意型別能夠出現(xiàn)的位置。
然后我們就可以定義這種型別的對象來使用了。

復制代碼 代碼如下:

Action aaa=new Action(...);

這個...代表的是符合這種函數(shù)原形的函數(shù)名字,注意使用delegate機制來調(diào)用,和直接調(diào)用函數(shù)本質上沒有什么不同,就是說,當你調(diào)用成員函數(shù)的時候,當然你需要有一個對象,而調(diào)用靜態(tài)函數(shù)的時候,你可以直接使用類名了。

這種delegate型別對象還有點特殊,它可以使用運算符+=和-=來增加或者減少本對象所代
理的函數(shù)集,當然還有更多的方法用來看當前我代理了多少個函數(shù)之類的。

復制代碼 代碼如下:

aaa+=new Action(xxx);
aaa+=new Action(ooo);

然后aaa(),意味著順序調(diào)用xxx和ooo。
aaa.GetInvocationList().length可以看到當前代理了多少個函數(shù)。
你不用擔心代理的普通成員函數(shù)的所屬對象會被垃圾回收器回收,直到此代理對象不再引用這個函數(shù),當然這個也是壞消息,說不定你都忘了還有某個代理對象代理著要死的對象的函數(shù),讓這個對象老不死。

相關文章

最新評論