1.構造函數
- 類名首字母大寫
- 構造函數:可以用來創建對象,并在構造函數中對對象進行初始化(簡化初始化過程--給對象的每個屬性賦值);構造函數可以有重載;類本身會有一個默認的、無參的構造函數,當你寫了一個(有參或者無參的構造函數時),默認的無參的構造函數都被干掉了;
-
構造函數是一個特殊的方法
1)構造函數沒有返回值,連void也沒有
2)構造函數名必須與類名一致
3)構造函數的訪問修飾符必須是public(若是private,則創建對象時無法對對象進行初始化)
4)創建對象的時候會執行構造函數
沒有構造函數時對對象初始化
2.new關鍵字
- new關鍵字
Person zsPerson = new Person();
new幫助我們做了三件事:
1)在內存中開辟一塊空間
2)在開辟的空間中創建對象
3)調用對象的構造函數初始化對象
3.this關鍵字
-
this關鍵字
1)代表當前類的對象
2)在類當中顯示地調用本類的構造函數(:this)
有參數的地方直接用參數(如name,chinese等),沒有參數的地方賦默認的初值(如0,‘男’)
在類當中顯示地調用本類的構造函數具體寫法
3)使用this可以區分局部變量和屬性
使用this可以區分局部變量和屬性
4.析構函數
- 析構函數
格式:~析構函數名(){ }
1)當程序結束時,析構函數才執行,用于幫助我們釋放資源(c#使用了GC垃圾回收器默認幫我們釋放資源)
2)如果想立刻釋放資源,自己顯示的寫一個析構函數
5.屬性只讀
實戰:屬性若是只讀不可寫的,那么通過字段來改變參數的值,傳入參數可用構造函數
6.命名空間
- 命名空間
缺少命名空間時引用命名空間快捷鍵 : ALT+SHIFT+F10然后敲回車; -
在一個項目中引用另一個項目的類
1)添加引用
2)引用命名空間
第一步.1:右鍵引用--點擊“添加引用”
第一步.2:引用項目“01復習”,所以在前面點勾,點擊確定
第二步:添加命名空間--using 01復習
7.值類型和引用類型
- 值類型和引用類型:計算機中變量大致可以分為兩類,數值型變量和非數值型的變量;對c#而言,分為值類型和引用類型兩種;
-
值類型和引用類型的區別:
1)值類型和引用類型在內存上存儲的地方不一致;
2)傳遞值類型和引用類型的方式不一樣,值類型稱之為值傳遞,引用類型稱之為引用傳遞;
3)值類型存儲在內存的棧中,引用類型存儲在內存的堆中;引用類型也在棧上開辟了空間存儲堆的地址;
值傳遞和引用傳遞的存儲區別 - 值類型:int,double,bool,decimal,char,struct,enum
- 引用類型:string,數組,自定義類和我們使用的所有類
8.字符串及相關函數
-
字符串
特性:
1)字符串的不可變性,如下圖所示(當你給一個字符串重新賦值之后,老值并沒有銷毀,而是重新開辟一塊空間存儲新值)
注:當程序結束時,如果發現內存中有空間沒有任何東西指向它(“如下圖所示的“”張三”),此空間會被GC垃圾回收器刪除;
字符串不可變性 -- “張三”沒有消失,“10”消失了
兩個字符串內容相同時只開辟一塊空間
驗證上圖 -- 1.打開“即時”
驗證上圖 -- 2.在“即時”窗口里面寫上“&s1”回車,返回棧地址和堆地址,發現堆地址相同
2)可以將字符串看作是char類型的一個只讀數組(即可以通過下標去訪問字符串中的某一個元素)
ToCharArray():將字符串轉換為char數組;
new String(char[] chs):能夠將char數組轉換為字符串;
為啥把string當成char類型的只讀數組 & 如何改變string里面某個字符的值(方法一)
如何改變string里面某個字符的值(方法二) -
StringBuilder:綜上所述,如果程序中進行大量的拼接會導致內存里垃圾很多,這是可以使用StringBuilder類
(未使用StringBuilder)Stopwatch是一個計時器類
(使用StringBuilder)與上圖的不同用紅線標注 -
字符串的方法
字符串.Length;
是獲取字符串長度;
字符串.ToUpper();
是將字符串轉換成大寫;
字符串.ToLower();
是將字符串轉換成小寫;
字符串1.Equals(字符串2);
的結果相當于字符串1 == 字符串2;
填入一個枚舉類型的參數StringComparison.OrdinalIgnoreCase就可以忽略大小寫進行比較了
字符串.Split();
用來分割字符串,返回的是字符串類型的數組;
使用Split()方法干掉不想要的字符后,被干掉的地方顯示null
注意:這里是string[]數組,所以會存在一項里面存多個字符(如下標為4的項存了“dfd”)
如何讓上圖被干掉的地方不顯示null,填入一個枚舉類型的參數StringSplitOptions.RemoveEmptyEntries
字符串.Contains();
返回值是bool類型,判斷一個字符串里是否包含()l里出現的字符;
字符串.Replace(“被替換文字”,“替換文字”);
返回一個字符串,用來替換字符串中的某些內容;
字符串.Substring(截取字符串開始下標【,截取長度】);
返回一個字符串,用于截取字符串中的一部分;
字符串.StartsWith(“字符串”);
返回bool類型的變量,判斷一個字符串是不是以()里的內容開始;
字符串.EndsWith(“字符串”);
返回bool類型的變量,判斷一個字符串是不是以()里的內容結束;
字符串.IndexOf(“字符串”【,“搜索起始位置”】);
返回int類型的變量,找到()里的字符在字符串里第一次出現的位置,找不到返回-1;
注意:“搜索起始位置”是為了找到非第一次出現的字符所在位置,加了“搜索起始位置”這個選項后搜索時包括搜索的起始位置;
字符串.LastIndexOf(“字符串”);
返回int類型的變量,找到()里的字符在字符串里最后一次出現的位置;
LastIndexOf+Substring
組合使用,例如截取地址:
LastIndexOf+Substring
注意: 1.@符號的作用:取消\在字符串和路徑中的轉義作用
2."\"代表一個\,第一個\是轉義符
3.使用index+1,因為要截取的是\后面的內容
字符串.Trim(“字符串”);
返回一個字符串,去掉字符串中所有的空格;
字符串.TrimEnd(“字符串”);
返回一個字符串,去掉字符串中,尾部的空格;
字符串.TrimStart(“字符串”);
返回一個字符串,去掉字符串中,頭部的空格;
string.IsNullOrEmpty(“字符串”);
返回一個bool類型的變量,null或者是“”都會返回true;
string.Join(“指定分隔字符”,“字符或字符數組”);
返回一個字符串,將指定字符放到每個數組元素后面且最后一個元素后面不放;執行效果如下:
9.注意
如何把txt文檔讀到控制臺上
1.先拿到控制臺的路徑string path = @"路徑"
2.使用File.ReadALLLines(path,Encoding.Default);
讀取文本中的所有內容,返回一個字符串數組;Encoding.Default是用來處理亂碼;能用if-else解決的都可以用三元表達式來寫;