1. 程式人生 > >C#快速入門

C#快速入門

esp 語言 邏輯 相同 多態性 不同 tostring 處理 處理器

[學習筆記]

一、簡介

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.cs
 2 
 3 using System; //使用系統命名空間
 4 
 5 namespace HelloWorldApplication //聲明命名空間
 6 
 7 {
 8 
 9    class HelloWorld            //class聲明
10 
11    {
12 
13       static void Main(string[] args)  /* main   方法 */
14 
15       {
16 17 /* 我的第一個 C# 程序*/ 18 19 Console.WriteLine("Hello World"); 20 21 Console.ReadKey(); 22 23 } 24 25 } 26 27 }

二、基礎

1、數據類型

bool 布爾值

byte 8 位無符號整數(0到255)

char 16 位Unicod字符

decimal 128位精確的十進制值,28-29位有效數

double 64位雙精度浮點型

float 32 位單精度浮點型

int 32位有符號整型

long 64 位有符號整型

sbyte 8位有符號整型

short 16位有符號整型

uint 32 位無符號整型

ulong 64位無符號整型

ushort 16位無符號整型

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

string [email protected],[email protected],此時轉義字符會被當作普通字符處理,且可進行任意的換行和縮進處理;多個字符串可用+號連接

type* name 指針類型

dynamic 動態類型

const 常量

nullable 可空類型(聲明:<data_type> ? <variable_name> = null;合並運算符 ?? 用於定義可空類型和引用類型默認值,如果不為空則為??前邊的值,如果給定值為空,則用??後邊的默認值)

2、數據類型轉換

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

double d = 1.23;

int x;

i = (int)d;

3、內置類型轉換方法

ToBooolean 如果可能的話,把類型轉換為布爾型

ToByte 把類型轉換為字節類型

ToChar 如果可能的話,把類型轉換為單個Unicode字符類型

ToDateTime 把類型轉換為時間結構

ToDecimal 把浮點型或整數類型轉換為十進制類型

ToDouble 把類型轉換為雙精度浮點型

ToInt16 把類型轉換為16位整數類型

ToInt32 把類型轉換為32位整數類型

ToInt64 把類型轉換為64位整數類型

ToSbyte 把類型轉換為有符號字節類型;

ToSingle 把類型轉換為有符號字節類型

ToString 把類型轉換為字符串類型

ToType 把類型轉換為指定類型

ToUInt16 把類型轉換為16位無符號整數類型

ToUInt32 把類型轉換為32位無符號整數類型

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(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、預處理器指令:

#define 定義一系列成為符號的字符;

#undef 取消定義符號;

#if 測試符號是否為真;

#else 與#if一起使用;

#elif 與#if一起使用;

#endif 指定一個條件指令的結束;

#line 修改編譯器的行數及輸出錯誤和警告的文件名;

#error 允許代碼的指定位置生成一個錯誤;

#warning 允許代碼的指定位置生成一級警告;

#region 指定一個可展開或折疊的代碼塊;

#endregion 與#region一起用,表示結束。

C#快速入門