Hello World //列印語句 Console.WriteLine("Hello World"); //暫停 Console.ReadKey(); 數據類型 1.值類型 byte,char,short,int,long,bool,decimal,float,double,sbyte,uint, ...
-
Hello World
//列印語句 Console.WriteLine("Hello World"); //暫停 Console.ReadKey();
-
數據類型
1.值類型 byte,char,short,int,long,bool,decimal,float,double,sbyte,uint,ulong,ushort
2.引用類型: 儲存的不是值實際數據而是一個記憶體地址 object、dynamic 和 string。
3.對象類型:Object 類型檢查是在編譯時發生的
4.動態類型: 可以存儲任何類型的值在動態數據類型變數中,類型檢查在運行時
5.字元串(String)類型
6.指針類型(Pointer types) -
類型轉換
- 隱式轉換
- 顯式轉換
- Toxxx方法
-
變數
-
常量
- 整數常量
- 整數常量可以是十進位、八進位或十六進位的常量。首碼指定基數:0x 或 0X 表示十六進位,0 表示八進位,不帶首碼則預設表示十進位。
- 整數常量也可以帶一個尾碼,尾碼是 U 和 L 的組合,U 表示無符號整數(unsigned),L 表示長整數(long)。尾碼可以是大寫,也可以是小寫,U 和 L 的順序任意。
- 浮點常量(小數必須包含整數)
- 字元常量
- 字元串常量
- 定義常量
- 整數常量
-
運算符
- 算數運算符
- 關係運算符
- 邏輯運算符
- 位運算符
- 賦值運算符
- 其他運算符
- sizeof():數據類型的大小
- typeof():返回 class的類型。
- &: 返回變數的地址
- *:變數的指針
- ?: :三元表達式
- is:判斷對象是否為某一類型
- as: 強制轉換,即使失敗也不會拋出異常
-
判斷:
- if
- switch
-
迴圈:
- while迴圈
- for/foreach
- do…while
-
封裝:
- public:允許一個類將其成員變數和成員函數暴露給其他的函數和對象。任何公有成員可以被外部的類訪問
- private:允許一個類將其成員變數和成員函數對其他的函數和對象進行隱藏。只有同一個類中的函數可以訪問它的私有成員。即使是類的實例也不能訪問它的私有成員。
- protected:該類內部和繼承類中可以訪問。
- internal:同一個程式集的對象可以訪問。
- protected internal:3 和 4 的並集,符合任意一條都可以訪問。
-
可空類型
-
//預設值為0 int a; //預設值為null int? b=123; //如果b為null就賦值2否則c=b int c= b?? 2; Console.WriteLine("c的值為{0}", c); Console.ReadLine();
-
-
數組
//初始化數組逐個賦值 int[] arr = new int[10]; arr[0] = 12312; //初始化數組並賦值 int[] arr1 = { 321, 312, 12312, 12312312, 12312312 }; //使用for迴圈賦值 for (int i = 0; i < 10; i++) { arr[i] = i + 100; } //使用forEach取值 foreach (int i in arr) { Console.WriteLine("元素的值為{0}", i); }
-
結構體
struct Books{ public string id; public string name; public string price; } static void Main() { Books book1; book1.id = "123"; book1.name = "aaa"; book1.price = "23131"; Console.WriteLine("書信息:書id{0},書名{1},書價格{2}",book1.id,book1.name,book1.price); Console.ReadLine(); }
- 類與結構的不同點
- 類是引用類型,結構是值類型
- 結構不支持繼承
- 結構不能聲明預設的構造函數
- 結構體中無法實例屬性或賦初始值
- 類與結構的選擇
- 當我們描述一個輕量級對象的時候,結構可提高效率,成本更低。數據保存在棧中,訪問速度快
- 當堆棧的空間很有限,且有大量的邏輯對象或者表現抽象和多等級的對象層次時,創建類要比創建結構好一些;
- 類與結構的不同點
-
枚舉
//枚舉列表中的每個符號代表一個整數值,一個比它前面的符號大的整數值,可自定義每個符號 enum Days { Sun, Mon, Tue, Wed, Thu, Fri, Sat }; static void Enum() { int a = (int)Days.Wed; Console.WriteLine(a); Console.ReadLine(); }
-
析構函數
class Test { string id; public Test() { Console.WriteLine("構造函數"); } ~Test() { Console.WriteLine("析構函數"); } static void Main() { Test test = new Test { id = "123" }; Console.WriteLine("id為{0}", test.id); Console.ReadLine(); } }
-
多態性
- 通過在類定義前面放置關鍵字 sealed,可以將類聲明為密封類。當一個類被聲明為 sealed 時,它不能被繼承。抽象類不能被聲明為 sealed。
- 當有一個定義在類中的函數需要在繼承類中實現時,可以使用虛方法。虛方法是使用關鍵字 virtual 聲明的。虛方法可以在不同的繼承類中有不同的實現。
-
運算符的重載
class Test2 { public int length; //運算符重載 public static Test2 operator +(Test2 a, Test2 b) { Test2 test = new Test2 { length = a.length - b.length }; return test; } static void Main(string[] args) { Test2 test = new Test2 { length = 12 }; Test2 test1 = new Test2 { length = 213 }; Test2 t = test + test1; Console.WriteLine("t的值{0}", t.length); Console.ReadLine(); } }
-
預處理器指令
-
define 預處理器
- 條件指令
-
-
異常處理
- try catch finally
- 常見異常:
- IO異常
- 空對象
- 類型轉換
- 除以0
-
文件的輸入與輸出
//位元組流讀取文件 static void Main(string[] args) { StreamReader streamReader =new StreamReader(@"D:\Document\test.txt"); string line; //讀取文件內容 while ((line = streamReader.ReadLine()) != null) { //列印出來 Console.WriteLine(line); } Console.ReadLine(); }
-
windows文件系統操作
static void Main(string[] args) { GetFile(@"D:\ProgramFiles"); Console.ReadLine(); } //獲得某文件夾下的文件名與大小 static void GetFile(String path) { DirectoryInfo directoryInfo = new DirectoryInfo(path); DirectoryInfo[] directoryInfo1 = directoryInfo.GetDirectories(); FileInfo[] files = directoryInfo.GetFiles(); if(directoryInfo1!=null) { foreach(DirectoryInfo directoryInfo2 in directoryInfo1) { if(directoryInfo2.Name!="app") { GetFile(path+@"\"+directoryInfo2.Name); } } } if(files!=null) { foreach(FileInfo file in files) { Console.WriteLine("文件名:{0},文件大小{1}",file.Name,file.Length); } } }
-
特性
-
預定義特性
1.AttributeUsage
2.Conditional
3.Obsolete:[Obsolete("過時了")]
編譯器會給出警告信息[Obsolete("過時了",true)]
編譯器會給出錯誤信息 -
自定義特性
-
-
委托
delegate void ConsoleWrite1(); namespace ConsoleApp1 { class Program { static void Main(string[] args) { ConsoleWrite1 consoleWrite1 = new ConsoleWrite1(ConsoleWrite); consoleWrite1(); Console.ReadLine(); } static void ConsoleWrite() { Console.WriteLine("測試"); }
-
委托的用途
static FileStream fs; static StreamWriter sw; // 委托聲明 public delegate void printString(string s); // 該方法列印到控制台 public static void WriteToScreen(string str) { Console.WriteLine("The String is: {0}",str); } // 該方法列印到文件 public static void WriteToFile(string s) { fs=new FileStream(@"D:\Document\test.txt", FileMode.Append,FileAccess.Write); sw=new StreamWriter(fs); sw.WriteLine(s); sw.Flush(); sw.Close(); fs.Close(); } // 該方法把委托作為參數,並使用它調用方法 public static void sendString(printString ps) { ps("Hello World"); } static void Main(string[] args) { printString ps1 = new printString(WriteToScreen); printString ps2 = new printString(WriteToFile); sendString(ps1); sendString(ps2); Console.ReadKey(); }
-
- 指針變數
static unsafe void Test12() { int i = 0; int* p = &i; Console.WriteLine("i的值為{0},記憶體地址為{1}",i,(int)p); Console.WriteLine(); }
- 傳遞指針作為方法的參數
static unsafe void Main() { int var1 = 10; int var2 = 20; Console.WriteLine("var1:{0},var2:{1}",var1,var2); int* a = &var1; int* b = &var2; Swap(a,b); Console.WriteLine("var1:{0},var2:{1}",var1,var2); Console.ReadLine(); } static unsafe void Swap(int* a,int* b) { int temp =*a; *a=*b; *b=temp; }
- 使用指針訪問數組元素
static unsafe void array() { int[] list = { 10,100,200 }; fixed (int* ptr = list) /* 顯示指針中數組地址 */ for(int i = 0;i<3;i++) { Console.WriteLine("Address of list[{0}]={1}",i,(int)(ptr+i)); Console.WriteLine("Value of list[{0}]={1}",i,*(ptr+i)); } Console.ReadKey();
- 指針變數
-
out參數:一個方法返回多個不同類型的參數
static void Main() { string s="asd"; int i=Test7(out s); Console.WriteLine(s); Console.WriteLine(i); Console.ReadLine(); } public static int Test7(out string a) { a="asddddddddddd"; return 1; }
- params參數
static void Main() { Params(213,31231,12312,13231,123,1312,312,312,321,3,12,312,12); } static void Params(params int[] array) { int max = array[0]; for(int i = 0;i<array.Length;i++) { if(array[i]>max) { max=array[i]; } } Console.WriteLine("最大值為{0}",max); Console.ReadLine(); }
- ref參數
static void Main() { int i = 30; Ref(ref i); Console.WriteLine(i); Console.ReadKey(); } static void Ref(ref int a) { a+=500; }
- 連接資料庫
static void MysqlConnection() { //配置連接信息 String connstr = "server=localhost;port=3306;user=root;password=123456;database=ztree"; MySqlConnection mySqlConnection = new MySqlConnection(connstr); //打開連接 mySqlConnection.Open(); //sql語句 string sql = "select * from city"; MySqlCommand mySqlCommand = new MySqlCommand(sql,mySqlConnection); //執行sql語句 MySqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader(); while(mySqlDataReader.Read()) { if(mySqlDataReader.HasRows) { Console.WriteLine("id:{0};name:{1};pid:{2}",mySqlDataReader.GetString(0),mySqlDataReader.GetString(1),mySqlDataReader.GetString(2)); } } mySqlConnection.Close(); }
更多相關文章
-
ArrayList集合是C#中的一個非泛型的集合類,是弱數據類型的集合類,可以使用ArrayList集合變數來存儲集合元素信息,任何數據類型的變數都可加入到同一個ArrayList集合中,在ArrayList集合中,如果需要移除指定索引位置的元素,可以使用ArrayList集合的RemoveAt方法 ...
-
List集合類和ArrayList集合類都是C#語言中用於存儲集合數據的集合類,兩者都可靈活的插入、刪除以及訪問元素等等。但List集合和ArrayList集合的差別還是挺大的,首先List集合類是泛型集合,List集合中存儲的數據的類型都是確定的。ArrayList集合類為非泛型類集合,集合中存儲 ...
-
在C#的集合操作過程中,我們一般常用的集合類為List集合,List集合是一種強類型的泛型集合,其實還有一個ArrayList集合類,ArrayList集合類則非泛型類的集合,並且ArrayList集合類不是強類型,任何類型的數據往ArrayList集合中新增都可以,所以在進行集合內部元素轉換操作的 ...
-
在C#中的Datatable類中,Clone方法和Copy方法都可以用來複制當前的DataTable對象,但DataTable類中的Clone方法和Copy方法還是有區別的,Clone方法只複製結構信息,包括所有 DataTable 架構和約束,但Copy方法除了複製結構信息之外,還複製DataTa ...
-
在C#中的Datatable類中,可以使用DataTable類的Merge方法對兩個相同結構的DataTable對象進行求並集運算,將兩個DataTable對象的數據行合併到其中一個DataTable變數中,或者說往其中一個DataTable對象中寫入另一個DataTable對象的所有數據行。下列例 ...
-
在C#中的Datatable數據變數的操作過程中,有時候需要知道某一個列名在DataTable中的索引位置信息,此時可以通過DataTable變數的Columns屬性來獲取到所有的列信息,然後通過Columns屬性中的IndexOf方法來獲取指定列名的索引位置,IndexOf方法的參數為列名。即通過 ...
-
C#中的Datatable數據變數的操作過程中,可以通過DataTable的Copy方法快速複製當前的DataTable變數到新對象中,複製數據包含當前DataTable的結構信息如列名,同時也包含當前表格中的所有數據信息,通過Copy方法複製DataTable對象方便快捷,無需迴圈遍歷原有的Dat ...
-
在C#中的Datatable數據變數的操作過程中,有時候需要判斷DataTable中是否存在某個列名,此時可以通過DataTable對象的Columns列對象集合屬性下的Contains方法來進行判斷,方便快捷,只需要傳入需要匹配的列的名稱,即可返回DataTable變數中是否存在該列名。 首先給出 ...