C 高階特性

2022-08-30 09:03:13 字數 4795 閱讀 5069

其實c#的高階特性,我覺得不能叫做高階特性

我覺得吧,c#的基本語法如果是必須要掌握的話

那麼這個所謂的高階特性其實也就是所謂的

c#這門語言的特色之處,它和其他語言的區別所在的地方

不能叫做高階特性,按照我的想法,這個才應該算是真正的c#語言

之前的那些只能是程式設計基礎而已

一開始就被這個「高階特性」這四個字嚇到了,以至於我跳過這個所謂的高階特性往下看

然後鼓起勇氣看這個「高階特性」的時候,才發現,根本也不高階到**去嘛

c#語言有四個精髓之處,其實也就三個,再化簡下來,其實也就兩個

1.泛型

2.泛型集合

3.委託

4.事件

泛型  說來也簡單,其實也就是  模板 

例子: 求數在陣列中的位置 (泛型版本)  

static void main()

;int i = index(nums,90);

string words = ;

i = index(words , "sg");

static int index(t a ,t value )

for(int i = 0; i < a.lenght ;  i++)

if (a[i].equals(value))

return i;

return -1;

可以看出,泛型其實也就是模板在c # 中的叫法而已,實現的時候只需要加乙個 就可以使用泛型了

這個比之前在c/c++版本中,方便了不少

泛型集合,所謂集合其實就是相同型別的一組泛型,其實也可以叫做容器,因為它的英文是collection

泛型集合的目的就是對一組相同型別的物件進行儲存並操作

泛型列表  —— list 可增長的動態模板陣列  ,通過泛型列表來新增物件

在泛型列表中,其實也可以叫做泛型類表,這個list 其實就是乙個類

這裡類裡,

屬性:capacity : 設定當前最大容量

count :    當前列表中元素個數

方法:public void add(t item); 新增列表元素到列表末尾

public void sort();  排序

public int indexof(t item);插入

public bool remove(t item);刪除

方法還有過載的不同版本

下面是從cen123蒐羅來的**,我覺得他說得很好,要是想進一步了解的話,我覺得不防去看看他那篇文章

-----------------------------分割線-----------------------------------

怎樣建立泛型集合?

主要利用system.collections.generic命名空間下面的list泛型類建立集合,語法如下:

list<t> listoft = new list<t>();

其中的"t"就是所要使用的型別,既可以是簡單型別,如string、int,也可以是使用者自定義型別。下面看乙個具體例子。

定義person類如下:

class person

//姓名

public string name

}//年齡

public int age}}

//建立person物件

person p1 = new person("張三", 30);

person p2 = new person("李四", 20);

person p3 = new person("王五", 50);

//建立型別為person的物件集合

list<person> persons = new list<person>();

//將person物件放入集合

persons.add(p1);

persons.add(p2);

persons.add(p3);

//輸出第2個人的姓名

console.write(persons[1].name);

可以看到,泛型集合大大簡化了集合的實現**,通過它,可以輕鬆建立指定型別的集合。非但如此,泛型集合還提供了更加強大的功能,下面看看其中的排序及搜尋。

泛型集合的排序

排序基於比較,要排序,首先要比較。比如有兩個數1、2,要對他們排序,首先就要比較這兩個數,根據比較結果來排序。如果要比較的是物件,情況就要複雜一點,比如對person物件進行比較,則既可以按姓名進行比較,也可以按年齡進行比較,這就需要確定比較規則。乙個物件可以有多個比較規則,但只能有乙個預設規則,預設規則放在定義該物件的類中。預設比較規則在compareto方法中定義,該方法屬於icomparable<t>泛型介面。請看下面的**:

class person :icomparable<person>

}compareto方法的引數為要與之進行比較的另乙個同型別物件,返回值為int型別,如果返回值大於0,表示第乙個物件大於第二個物件,如果返回值小於0,表示第乙個物件小於第二個物件,如果返回0,則兩個物件相等。

定義好預設比較規則後,就可以通過不帶引數的sort方法對集合進行排序,如下所示:

//按照預設規則對集合進行排序

persons.sort();

//輸出所有人姓名

foreach (person p in persons)

下面來講一講委託  ,委託是乙個型別,它用來封裝方法 目的是,實現把方法作為乙個引數來傳遞

委託是從system.delegate類派生的類

//宣告委託: 和宣告方法類似,但是多乙個delegate關鍵字

如: 

在class program外層定義委託

delegate void delegateone();

delegate double delegatetwo(double r,double t);

在program內部寫出與main()併排的函式

static double add(double a, double b)

static void printstar()

}static void printline()

}在main函式中使用委託

//注意:委託傳遞的是ta的名稱,而不是ta的呼叫,千萬不能加括號

//委託裡面放的是方法的位址,呼叫委託就是依次呼叫委託中方法的位址

delegateone di = new delegateone(printstar);

di();//呼叫委託,相當於 printstar

//+= 也是傳遞的名稱,而不是方法的呼叫

di += printline;

di();//呼叫委託,相當於 printstar, printline

double a = 0.2;

double b = 0.3;

double r;

delegatetwo d2 = new delegatetwo(add);

r = d2(a,b);  //委託 呼叫 含有引數的方法

其實委託的作用就是,更方便的呼叫方法,或者說是依次呼叫方法,或者是,把同乙個方法呼叫多次

但是,據說委託的真正意義不僅僅是這樣,而是配合著事件來使用的。

那麼,下面就介紹什麼是事件

事件是在委託的基礎上,記住,是在委託的基礎上

事件具有不確定性發生的函式

例如: 按鈕有乙個單擊的事件,什麼時候發生這個事件軟體不知道,但是,事件發生了之後軟體就依次執行事件裡面的方法

//宣告事件的語法

public event  委託型別   事件名稱;

/** 事件

* 例: 體重改變事件

* 建立乙個woman類,有名稱,年齡,體重三個屬性

* 體重發生變化時,出發事件getfatter/getthinner

* 訂閱事件 用+=

*/delegate void weightchange(double newweight);

class woman

public int age

//public double weight

private double w;

//定義了兩個事件,分別在當人的體重變輕和變重的時候出發這個事件

public double weight

set

else if (w > value)

w = value;}}

public event weightchange getfatter;

public event weightchange getthinner;

//定義函式

static void girl_getthinner(double newweight)

",newweight);

system.console.readline();

}static void girl_getfatter(double newweight)

", newweight);

system.console.readline();

}//主函式

woman girl = new woman();

//事件處理程式

girl.getthinner += new weightchange(girl_getthinner);

girl.getfatter += new weightchange(girl_getfatter);

girl.weight = 60;

//隨機數字

random r = new random();

for (int i = 0; i < 5; i++ )

大致就是這麼多了,今天累了,就這樣吧。

第一次學,不好的地方,請指正!

C 高階特性

msad的解釋.netframework是為其執行的應用程式提供各種服務的託管執行環境 主要元件公共語言執行時 clr 和.net framework.託管 和非託管 託管 就是visual baseic net和c 編譯器編譯出來的 託管 在公共語言執行庫 clr 中執行 非託管 是執行在公共語言...

C 高階教程 特性

特性 attribute 是用於在執行時傳遞程式中各種元素 比如類 方法 結構 列舉 元件等 的行為資訊的宣告性標籤。您可以通過使用特性向程式新增宣告性資訊。乙個宣告性標籤是通過放置在它所應用的元素前面的方括號 來描述的。特性 attribute 用於新增元資料,如編譯器指令和注釋 描述 方法 類等...

c 之高階特性

一.c 委託 概念 委託是一種引用型別,表示對方法的引用,這個方法是具有特定返回值型別和引數的方法。方式一 通過委託例項呼叫方法 方式二 使用委託把方法作為引數傳遞給其它方法。委託 方式一 的使用步驟 1.宣告委託 語法 delegate 返回值型別 委託名 引數列表 delegate string...