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.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#快速入門