C#快速入門

覆手為雲p發表於2017-08-14

 [學習筆記]

一、簡介

1、C#是由Anders Hejlsberg和他的團隊在.Net框架開發期間開發的;是.Net框架的一部分。

  C#是專為公共語言基礎結構(CLI)設計的,CLI由可執行程式碼和執行時環境組成,允許在不同計算機平臺和體系結構上使用各種高階語言。

2、C#是大小寫敏感的,每條語句都以 ; 結尾。程式執行從main開始,與Java不同的是,檔名可以不同於類名稱;一個檔案裡可以有多個class;

3、Console.Write()               列印,一次同時列印多個引數可用佔位符{0}...類似於format,後邊用逗號隔開依次要輸入各位的引數;

4、Console.ReadLine()   輸入;

5、Console.ReadKey()    等待按鍵;

6、// 或者 /*...*/              註釋

7、hello world

 1 //hello world !
 2 using System; //使用系統名稱空間
 3 namespace HelloWorldApplication //宣告名稱空間
 4 {
 5    class HelloWorld        //class宣告
 6    {
 7       static void Main(string[] args)    /* main    方法 */
 8       {
 9          /* 我的第一個 C# 程式*/
10          Console.WriteLine("Hello World");
11          Console.ReadKey();
12       }
13    }
14 }

 

二、基礎      

1、資料型別

 1 bool          布林值
 2 byte          8位無符號整數(0到255)
 3 char          16位Unicod字元
 4 decimal      128位精確的十進位制值,28-29位有效數
 5 double      64位雙精度浮點型
 6 float        32位單精度浮點型
 7 int         32位有符號整型
 8 long         64位有符號整型
 9 sbyte        8位有符號整型
10 short        16位有符號整型
11 uint         32位無符號整型
12 ulong        64位無符號整型
13 ushort      16位無符號整型            

可用sizeof(type)方法來獲取一個變數在特定平臺上的準確尺寸;

string                  字串可用引號和@引導,用@引導時稱作“逐字字串”,此時轉義字元會被當作普通字元處理,且可進行任意的換行和縮排處理;多個字串可用+號連線

type* name         指標型別

dynamic              動態型別

const                  常量

nullable              可空型別(宣告:<data_type> ? <variable_name> = null;合併運算子 ?? 用於定義可空型別和引用型別預設值,如果不為空則為??前邊的值,如果給定值為空,則用??後邊的預設值)

 

2、資料型別轉換

顯示型別轉換(強制轉換)

double d = 1.23;
int x;
i = (int)d;

 

3、內建型別轉換方法

 1 ToBooolean    如果可能的話,把型別轉換為布林型
 2 ToByte        把型別轉換為位元組型別
 3 ToChar        如果可能的話,把型別轉換為單個Unicode字元型別
 4 ToDateTime    把型別轉換為時間結構
 5 ToDecimal     把浮點型或整數型別轉換為十進位制型別
 6 ToDouble     把型別轉換為雙精度浮點型
 7 ToInt16       把型別轉換為16位整數型別
 8 ToInt32       把型別轉換為32位整數型別
 9 ToInt64       把型別轉換為64位整數型別
10 ToSbyte       把型別轉換為有符號位元組型別;
11 ToSingle      把型別轉換為有符號位元組型別
12 ToString      把型別轉換為字串型別
13 ToType        把型別轉換為指定型別
14 ToUInt16      把型別轉換為16位無符號整數型別
15 ToUInt32      把型別轉換為32位無符號整數型別
16 ToUInt64      把型別轉換為64位無符號整數型別

 

示例:

int i = 5;
i.ToSingle();
      
string locstr = 123.ToString();
//如果要將"locstr"轉成整型數
//方法一: 用 Convert 
int i = Convert.ToInt16(locstr);
//方法二: 用 Parse
int ii = int.Parse(locstr);

4、資料裝箱與拆箱

裝箱(值型別轉換為物件型別)

int x = 8;
object ob = x;

拆箱(之前由值型別轉換而來的物件型別再轉回值型別)

int x = 9;
object ob = x;
int y = (int)ob

5、運算子

算術運算子:+,-,*,/,%,++,--

關係運算子:==,!=,>,<,>=,<=

邏輯運算子:&&,||,!

位運算子:&,|,^,~,<<,>>

賦值運算子:=,+=,-=,*=,/=,%=,<<=,>>=,^=,|=

其他運算子:

sizeof()    返回資料型別的大小

typeof()   返回class型別

&                  返回變數的地址

*                    變數的指標

?:                   條件表示式

is                   判斷物件是否為某一型別

as                  強制轉換,即使失敗也不會丟擲異常

 

6、陣列(Array)

宣告: datatype[] arrayName;

初始化: double[] a = new double[10],可使用foreach來遍歷陣列:foreach (double i in a)

C#支援多維陣列;在定義一個新陣列時[ ]也可以不給定個數。

 

7、結構(struct)

struct name
{
    Access_Specifier type name
}

C#中結構與C或C++相比有以下特點:

1)結構可帶有方法、欄位、索引、屬性、運算子方法和事件;

2)結構可定義建構函式,但不能定義解構函式;但也不能定義預設的建構函式;

3)與類不同,結構不能繼承其他結構或類的基礎結構;

4)結構可實現一個或多個介面;

5)結構成員不能指定為abstract、virturl或protected;

6)當使用New操作符建立一個結構物件時,會呼叫適當的建構函式來建立結構;但結構可不使用New操作符即可被例項化;

7)如果不使用New操作符,只有在所有的欄位都被初始化之後,欄位才被賦值,物件才被使得;

 

8、列舉(Enum)

enum <enum_name>
{
    enumeration list
}

預設列舉的第一個符號的值是0,但也可以自己指定每個符號的值。

 

三、控制結構

1、if...else語句

if...else
if(boolean_expression){
}
else if{
}
else{
}

 

2、switch語句

switch(expression){
    case const-expression:
        statement(a);
        break;
    case const-expression:
        statement(b);
        break;
    default:
        statement(c);
        break;
}

 

3、while迴圈

while(condition){
    statement;
}

 

4、do...while迴圈

do{
    statement;
}while(condition);

 

 

5、for迴圈

for(init;condition;increment){
    conditional code;
}

 

6、函式

<Access Specifier> <Return Type> <Method Name>(Parameter List)
{
    Method Body;
}

 

四、物件導向程式設計(Class)

1、C#的封裝

public            所有物件都可以訪問;

private           物件本身在物件內部可以訪問;

protected       只有該類物件及其子類物件可以訪問;

internal          同一個程式集的物件可以訪問;

protected internal 一個程式集內的物件,或者該類物件及其子類可以訪問;

 

2、類的定義

<access specifier> class class_name
{
    <access specifier> <data_type> variable_name1;
    <access specifier> <data_type> variable_name2;
    ...
    <access specifier> <return_type> method1(parameter_list){
        body;
    }
    <access specifier> <return_type> method1(parameter_list){
        body;
    }
    ...
}

 

3、建構函式

類的一個特殊成員函式,當建立類的新物件時執行;建構函式名稱與類名稱完全相同,但它沒有任何返回型別。

預設的建構函式沒有任何引數,但也可以有引數,這種方法可以幫助在建立物件同時給物件賦初始值。

4、解構函式:

類的一個特殊成員函式,當類的物件超出範圍時執行;

解構函式的名稱是在類的名稱前加上一個 ~ 作為字首,它不返回值,也不帶引數;

解構函式用於在結束程式之前釋放資源。解構函式不能繼承或過載;

 

5、類的繼承:

class <derived_class> : <base_class>{

}

對於建構函式的繼承需要在引數後加 : baseMethod(parameter_list)

對於宣告為sealed類為密封類,密封類不能被繼承。

C#不支援多重繼承,但可以通過介面來實現。

6、函式過載

在同一個範圍內對相同的函式名有多個定義,但函式的定義必須彼此不同,可以是引數型別不同,也可以是個數不同,但不能只有返回型別不同。

7、動態多型性(抽象類和虛方法)

使用abstract關鍵字建立抽象類,用於提供介面的部分類的實現。當一個派生類繼承自該抽象類時,實現即完成;抽象類包含抽象方法,抽象方法可被派生實現;

繼承一個抽象方法時用override宣告;

不能建立一個抽象類的例項;

不能在一個抽象類外部宣告一個抽象方法;

抽象類不能被宣告為sealed。

 

虛方法用virtual宣告,在不同的繼承類中有不同的實現,對虛方法的呼叫是在執行時發生的。

 

8、運算子的過載

在類中對運算子的重新定義,通過關鍵字operator+運算子 來定義的;

只有算術運算子和比較運算子可以被過載。

 

9、介面(interface)

介面定義了所有類繼承介面時應遵循的語法合同,定義了屬性、方法和事件;介面使得實現介面的類或結構在形式上保持一致。

介面使用interface宣告,後邊接介面名稱即可。

介面的繼承和類一樣,類繼承介面時必須先在static void main()中例項一個當前的類,然後呼叫介面的方法,再實現介面的方法。

 

附:

1、名稱空間(namespace)

用於提供一種讓一組名稱與其他名稱分隔開的方式。在同一程式內使用多個名稱空間,在呼叫其他的類或方法時需用名稱空間名後跟 . 進行定位區分。

也可以使用using來提前名稱空間。(using還可以用於給很長的路徑起別名)

名稱空間可以進行巢狀。

 

2、前處理器指令:

 1 #define        定義一系列成為符號的字元;
 2 #undef         取消定義符號;
 3 #if            測試符號是否為真; 
 4 #else          與#if一起使用;
 5 #elif          與#if一起使用;
 6 #endif         指定一個條件指令的結束;
 7 #line          修改編譯器的行數及輸出錯誤和警告的檔名;
 8 #error         允許程式碼的指定位置生成一個錯誤;
 9 #warning       允許程式碼的指定位置生成一級警告;
10 #region        指定一個可展開或摺疊的程式碼塊;
11 #endregion     與#region一起用,表示結束。

 

補充提高內容:https://www.cnblogs.com/aland-1415/p/9347915.html

相關文章