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()
待補: