c#面向對象2--構造函數/new/this/析構函數/屬性只讀/namespace/值類型引用類型/字符串

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(“指定分隔字符”,“字符或字符數組”);返回一個字符串,將指定字符放到每個數組元素后面且最后一個元素后面不放;執行效果如下:

Join()

Join()

9.注意

  • 如何把txt文檔讀到控制臺上
    1.先拿到控制臺的路徑string path = @"路徑"
    2.使用File.ReadALLLines(path,Encoding.Default);讀取文本中的所有內容,返回一個字符串數組;Encoding.Default是用來處理亂碼;

  • 能用if-else解決的都可以用三元表達式來寫;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容