C# 和 c++的語法不同點


 

GC   Garbage Collection 垃圾回收器

    自動釋放資源

 關鍵字:

  new  1.創建對象

      2.隱藏從父類繼承的同名函數

  using  1.引用命名空間

      2. using(FileStream fsRead = new FileStream(source, FileMode.Open, FileAccess.Read)      //自動釋放資源

       {

        fsRead .Read(buffer,0, buffer.Length);

       }

  

 

計時:

  Stopwatch sw = new Stopwatch();

  sw.Start();

  sw.Stop();

  sw.Elapsed(); //取經過的時間

 

c#   也是強類型語言,變量定義時需要指定類型 

ojbect類:

  GetType()

  

var:  自動變量,對應c++中auto類型,根據值推斷類型

    var 變量定義時必須指定值

   

格式化:

  {num:fmt} 先挖坑

  默認輸出的結果是ToString()方法的結果,默認是對象的命名空間

 

隨機數: 

  Random r = new Random();

  int n = r.Next(0 -10); 

 

數組:  

  定義:  [int[] ary;

  成員:  ary.length

 

函數:

  參數: ref out param

 

類: 

  field字段 

  property屬性    避免field被直接訪問(隱藏保護), 限制限定監控對field的輸入輸出

  method方法

   類對象是智能指針(引用)類型, 需要new分配空間才能使用, 會自動釋放.

   實例(普通)成員:    對象實例名+ . 來訪問

   靜態成員:  類名+ . 來訪問 ,靜態函數只能訪問靜態成員,同c++

 

靜態類:

  public static class

  應用場景:  1. 經常使用的函數封閉成工具類, 如Console

       2.整個項目中資源共享(靜態資源存儲區)

  不能創建對象, 只能用類名+.來訪問成員

  進程結束才會釋放資源.  

  

構造函數:

  類默認有無參構造函數,如果提供了有參無參任意一個構造函數,則不會有默認構造

  顯示調用其它構造可以解決多構造函數冗余,

  如: public Ctor(string name, int age):this(name)  

 

封閉, 繼承, 多態

  繼承屬性和方法, 不繼承私有field

  子類不繼承父類構造函數

  繼承的單根性: 一個子類只能繼承一個父類

  繼承的傳遞性

  父類有默認構造函數,如提供有參構造函數,父類默認構造就沒有了

  子類構造時會先調用父類構造,默認調用默認構造,

  也可顯示調用父類其它構造, 如   : base(xx)

 

里氏轉換:

  子類對象可以賦值給父類對象

  如果父類對象中裝的是子類對象,可以強轉為子類對象

  判斷:

    if (p is ClassA) {ClassA a = (ClassA) p;} 

    ClassA a = p as ClassA;

    可以根據對象的真實類型,實現多類

  

析構函數

  替代gc 提前回收?

 

Collections 集合(容器):

  ArrayList: 

    Count: 實際包含個數

    Capacity:  容量,包含多分配的預留空間,

    Add, AddRange

    Insert

    Remove, RemoveAt, RemoveRange

    Sort

    Reverse

    Contains

 

  Hashtable:  鍵值對集合, 同c++中hashMap, 鍵必須唯一

    map[key] = value;   //沒有則添加,有則替換值(效果同覆蓋)

    Count 數量,不能用於遍歷

    map.Add(1,"zhangsan");

    map.Add(false, "錯誤的");

    判斷包含:

      ContainsKey(

    

    Console.Write(map[key])

    遍歷用foreach, 大數據量時比普通循環效率高很多倍

    foreach (var item in map.Keys) {

      Console.WriteLine("key: {0}, value:{1}, item, map[item]);

    }

 

命名空間

  鼠標點

  alt+shift+f10

  

使用其它項目中的類的步驟

  添加引用項目

  添加引用命名空間

  

值類型 和 引用類型

  值類型: int, double, bool, char, decimal, struct, enum

  引用類型(指針): string, 數組, 自定義類

  區別:

  1.   存儲位置不同, 值類型存儲在棧上, 引用類型存儲在堆上

  2.  在傳遞值類型和傳遞引用類型時,傳遞方式不一樣

 



Path工具類
  Path.GetFileName(fullPath)
  .GetExtension()
  .GetFileNameWithExtension(fullPath)
  .GetDirectoryName(
  .GetFullPath(
  .Combine(@"c:\a\", "xx.exe")

File類:  只能操作小文件, 一次性讀寫
  Exists(path) 判斷文件是否存在
  File.Create(@"c:\1.txt");
  File.Delete(@"c:\1.txt");
  File.Copy(@"c:\1.txt", @"c:\2.txt");
  File.Move(
  string[] ReadAllLines(string path) 讀取文本文件到字符串數組中
  void WriteAllLines(string path,string[] strs) 將串數組逐行寫到path指定的文件中,會覆蓋
  string ReadAllText(string path) 讀取文本文件到字符串中
  void WriteAllText(string path,string contents) 將contents寫到path指定的文件中,會覆蓋
  ReadAllBytes() Encoding.Default.GetString(byte[])
  WriteAllBytes() Encoding.Default.GetBytes(char*)
  AppendAllText(string path, string contents) 將文本添加到path文件中

  AppendAllLines(string path, string contents) 將文本添加到path文件中

  AppendText(string path, string contents) 將文本添加到path文件中



字符編碼:
  ASC編碼:
  ASCII編碼:
  GB2312(國標)編碼:
  Big5: 繁體字編碼
  GBK: 既有簡體又有繁體

  unicode編碼
    utf-8: web應用, unicode的一種


  Encoding.UTF8.GetString(byte[])
  Encoding.Default.GetString(byte[])
  Encoding.GetEncoding("GB2312").GetString(byte[]), 所有編碼
  Encoding.Default.GetString(byte[]) 數組轉字符串
  Encoding.Default.GetBytes(char*) 字符串轉數組

 

字符串:  

  \0結尾的char類型,只讀數組,同c++

  @ 符號,后面的字符中'\' 代表'\'字符本身,不用作轉義符

  不可變性, 只能修改引用不能修改引用位置的值, 無引用的字符串,(程序結束時)由gc回收

  成員屬性和方法:

    Length

    ToUpper()  ToLower

    Equals(dst, StringComparison.OrdinalIgnoreCase) 忽略大小寫

    Split()

      char [] chs = {' ', '_', '+','=',','};

      "a b  dfd _ + + ,,, fdf ".Split(chs, StringSplitOptions.RemoveEmptyEntries);

      StringSplitOptions.RemoveEmptyEntries 用於去掉替換時產生的空字符

    Replace

    Contains  判斷包含

    Substring(

    Endwith(

    IndexOf(  LastIndexOf(

    Trim(  TrimStart(  TrimEnd(

    IsNullOrEmpty()

    Join(  將分割符放在每個數組后面

      string[] names = {"zhangsan", "lisi", "wangwu"};

      string str = string.Join("|", names);

      

      

StringBuilder

  大規模拼接字符串時使用,append(), toString()

 

待補:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM