C#快速入門


 [學習筆記]

一、簡介

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM