程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> c#學習筆記(1)

c#學習筆記(1)

編輯:C#基礎知識

1, 結構(struct) 與 類(class)
[attributes] [modifiers] struct identifier [:interfaces] body [;]
結構與類很相似,都表示可以包含數據成員和函數成員的數據結構。與類不同的是,結構是值類型並且不需要堆分配。結構類型的變量直接包含結構的數據,而類類型的變量包含對數據的引用(該變量稱為對象)。 struct 類型適合表示如點、矩形和顏色這樣的輕量對象。盡管可能將一個點表示為類,但結構在某些方案中更有效。在一些情況下,結構的成本較低。例如,如果聲明一個含有 1000 個點對象的數組,則將為引用每個對象分配附加的內存。結構可以聲明構造函數,但它們必須帶參數。聲明結構的默認(無參數)構造函數是錯誤的。總是提供默認構造函數以將結構成員初始化為它們的默認值。在結構中初始化實例字段是錯誤的。在類中,必須初始化實例對象. 使用 new 運算符創建結構對象時,將創建該結構對象,並且調用適當的構造函數。與類不同的是,結構的實例化可以不使用 new 運算符。如果不使用 new,那麼在初始化所有字段之前,字段將保持未賦值狀態且對象不可用。對於結構,不像類那樣存在繼承。一個結構不能從另一個結構或類繼承,而且不能作為一個類的基。但是,結構從基類 Object 繼承。結構可實現接口,其方式同類完全一樣。
[c++] 與 C++ 不同,無法使用 struct 關鍵字聲明類。在 C# 中,類與結構在語義上是不同的。結構是值類型,而類是引用類型。
2, 裝箱和拆箱(取消裝箱)
裝箱是值類型到 object 類型或到該值類型所實現的任何接口類型的隱式轉換。將一個值的值裝箱會分配一個對象實例並將該值復制到新的對象中。關鍵字 object. 取消裝箱是從 object 類型到值類型或從接口類型到實現該接口的值類型的顯式轉換。取消裝箱操作包括:檢查對象實例,確保它是給定值類型的一個裝箱值。將該值從實例復制到值類型變量中。
例:
int i = 123; // A value type
object box = i; // Boxing
int j = (int)box; // Unboxing

裝箱轉換
取消裝箱
3 , 隱式和顯式
下列轉換屬於隱式轉換:例:object o=i;
標識轉換。
隱式數值轉換。
隱式枚舉轉換。
隱式引用轉換。
裝箱轉換。
隱式常數表達式轉換。
用戶定義的隱式轉換。
下列轉換屬於顯式轉換: object 0=(object)i;
所有隱式轉換。
顯式數值轉換。
顯式枚舉轉換。
顯式引用轉換。
顯式接口轉換。
取消裝箱轉換。
用戶定義的顯式轉換
4, delegate(委托)
delegate void D(int x);
class C{
public static void M1(int i) { /* ... */ }
public static void M2(int i) { /* ... */ }}
class{…….D cd1 = new D(C.M1);………….}
委托是一個數據結構,該數據結構引用一個靜態方法,或引用一個對象實例和該對象的實例方法。在 C 或 C++ 中與委托最接近的是函數指針,但函數指針只能引用靜態函數,而委托可以同時引用靜態方法和實例方法。在後一種情況中,委托不僅存儲對方法入口點的引用,還存儲對調用其方法的對象的引用。與 C++ 函數指針不同,委托是完全面對對象的;與指向成員函數的 C++ 指針不同,委托同時封裝對象實例和方法。委托聲明定義從類 System.Delegate 派生的類。委托實例封裝一個或多個方法,每個方法都被稱為可調用實體。對於實例方法,可調用實體由一個實例和該實例上的方法組成。對於靜態方法,可調用實體僅由一個方法組成。給定委托實例和適當的參數集,便可以用該參數集調用此委托實例的所有方法。委托實例的一個有趣和有用的屬性是它不了解或不關心它所封裝的方法的類;真正重要的只是方法要與委托的類型兼容, 這使委托非常適合“匿名”調用。可選的形參表指定委托的參數,而返回類型則指示委托的返回類型。如果下面兩個條件都為真,則方法和委托類型是兼容的:(兼容的概念就是可以用此聲明的委托對方法進行委托).
1它們具有相同的參數數目,並且類型相同,順序相同,參數修飾符也相同。
2它們的返回類型相同。
C# 中的委托類型是名稱等效的,而不是結構等效的。(但是請注意:兩個不同但結構上等效的委托類型的實例可能會比較為相等),准確地說,兩個具有相同參數列表、簽名和返回類型的不同的委托類型被認為是不同的委托類型。委托實例所封裝的方法集合稱為調用列表。
5, interface(接口)
[attributes] [modifiers] interface identifier [:base-list] {interface-body}[;]
一個接口定義一個協定。實現接口的類或結構必須遵守其協定。接口可以從多個基接口繼承,而類或結構可以實現多個接口。接口可以包含方法、屬性、事件和索引器。接口本身不提供它所定義的成員的實現。接口只指定實現該接口的類或接口必須提供的成員。接口可以是命名空間或類的成員,並且可以包含下列成員的簽名:方法屬性 索引器.
一個接口可從一個或多個基接口繼承。接口可由類實現。實現的接口的標識符出現在類的基列表中。被繼承的接口稱為該接口的顯式基接口。當接口具有一個或多個顯式基接口時,在該接口聲明中,接口標識符後跟一個冒號以及由逗號分隔的基接口標識符列表。接口的基接口是顯式基接口及其基接口。換言之,基接口集是顯式基接口、它們的顯式基接口(依此類推)的完全可傳遞的閉包。接口繼承其基接口的所有成員。接口成員是通過 I.M 和 I[A] 形式的成員訪問和索引訪問表達式訪問的,其中 I 是接口類型的實例,M 是該接口類型的方法、屬性或事件,A 是索引器參數列表。接口可以由類和結構實現。為了指示類或結構實現接口,在該類或結構的基類列表中包含了接口標識符。在實現類或結構中定位接口成員的實現的過程稱為接口映射。
6,object
object 類類型是所有其他類型的最終基類。C# 中的每種類型都是直接或間接從 object 類類型派生的。可以把任何類型的數值給object類型.
7,string類型
string 類的實例表示 Unicode 字符串。盡管 string 是引用類型,但相等運算符(== 和 !=)被定義為比較 string 對象(而不是引用)的“值”(7.9.7 字符串相等運算符)。這使得對字符串相等性的測試更為直觀。字符串為 string 類型並可寫成兩種形式,即用引號引起來和用 @ 引起來。用引號引起來的字符串括在雙引號 (") 內, 並且可以包含包括換碼序列在內的任何字符用 @ 引起來的字符串以 @ 開頭,並用雙引號引起來。用 @ 引起來的字符串以 @ 開頭,並用雙引號引起來。若要在一個用 @ 引起來的字符串中包括一個雙引號,請使用兩對雙引號:@ 符號的另一種用法是使用碰巧成為 C# 關鍵字的被引用的 (/reference) 標識符。
8, 修飾符
修飾符作用
訪問修飾符
public
private
internal
protected
指定聲明的類型和類型成員的可訪問性。

訪問不受限制
只有包含該類的成員的類可以訪問
只有當前工程可以訪問
只有包含該成員的類和繼承的類可以訪問
abstract指示某個類只能是其他類的基類。
const指定無法修改字段或局部變量的值。
event聲明一個事件。
extern指示外部實現此方法。
override提供從基類繼承的虛擬成員的新實現。
readonly聲明一個字段,該字段只能賦值為該聲明的一部分或者在同一類的構造函數中。
sealed指定類不能被繼承。
static聲明屬於類型本身而不是屬於特定對象的成員。
unsafe聲明不安全的上下文。
virtual在派生類中聲明其實現可由重寫成員更改的方法或訪問器。
volatile指示字段可由操作系統、硬件或並發執行的線程等在程序中進行修改。

9,語句
語句是程序指令。除非特別說明,語句都按順序執行。C# 具有下列類別的語句。
類別C# 關鍵字
選擇語句if, else, switch, case
迭代語句do, for, foreach, in, while
跳轉語句break, continue, default, goto, return
異常處理語句throw, try-catch, try-finally
Checked 和 Uncheckedchecked, unchecked
fixed 語句Fixed
lock 語句Lock

(1) foreach 語句為數組或對象集合中的每個元素重復一個嵌入語句組。foreach 語句用於循環訪問集合以獲取所需信息,但不應用於更改集合內容以避免產生不可預知的副作用。此語句的形式如下:
foreach (type identifier in expression) statement
若要循環訪問集合,集合必須滿足特定的要求。集合類型:
必須是 interface、class 或 struct。
必須包括返回類型的名為 GetEnumerator 的實例方法,例如 Enumerator(詳見下文)。
Enumerator 類型(類或結構)必須包含:
一個名為 Current 的屬性,它返回 ItemType 或者可以轉換為此類型的類型。屬性訪問器返回集合的當前元素。
· 一個名為 MoveNext 的 bool 方法,它遞增項計數器並在集合中存在更多項時返回 true。
有三種使用集合的方法:
使用上述指導創建一個集合。此集合只能用於 C# 程序。
1. 使用上述指導創建一個一般集合,另外實現 IEnumerable 接口。此集合可用於其他語言(如 Visual Basic)。
2. 在集合類中使用一個預定義的集合。
(2) throw 語句用於發出在程序執行期間出現反常情況(異常)的信號。throw 語句的形式為:
throw [expression];
expression :異常對象。當在 catch 子句中再次引發當前異常對象時,它被省略。
(3)try –catch語句
try-catch 語句由一個 try 塊和其後所跟的一個或多個 catch 子句(為不同的異常指定處理程序)構成。try-catch 語句采用下列形式之一:
try try-block
catch (exception-declaration-1) catch-block-1
catch (exception-declaration-2) catch-block-2
...
try try-block catch catch-block
(4) fixed
防止變量被垃圾回收器重定位。
(5) lock
lock 關鍵字將某個語句塊標記為臨界區。
6. 方法參數
如果為沒有 ref 或 out 的方法聲明一個參數,則此

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved