【C#學習記錄】八、面向物件概念4(零碎概念)
阿新 • • 發佈:2022-03-08
目錄
C#中的訪問修飾符
修飾符 | 作用 |
---|---|
public | 公開的公共的 |
private | 私有的,只能在當前類的內部訪問 |
protected | 受保護的,只能在當前類的內部以及該類的子類中訪問 |
internal | 只能在當前專案中訪問。在用一個專案中,internal和public的許可權是一樣的。 |
protected internal | 只能在專案內部使用,只能在當前類的內部以及該類的子類中訪問 |
- 能夠修飾類
- 子類的訪問許可權不能高於父類的訪問許可權,會暴露父類的成員。
設計模式
23種設計模式
23種設計模式 | |||
---|---|---|---|
單例模式 | 抽象工廠模式 | 工廠方法模式 | 建造者模式 |
原型模式 | 介面卡模式 | 裝飾器模式 | 代理模式 |
外觀模式 | 橋接模式 | 組合模式 | 享元模式 |
策略模式 | 模板方法模式 | 觀察者模式 | 迭代器模式 |
責任鏈模式 | 命令模式 | 備忘錄模式 | 狀態模式 |
訪問者模式 | 中介者模式 | 直譯器模式 |
值型別和引用型別
值型別在賦值的時候,傳遞的是這個值本身
引用型別在複製的時候,傳遞的是對這個物件的引用。
特殊:字串的不變性
ref
在傳參的時候加ref,則傳遞的是物件的地址
序列化與反序列化
序列化:將物件轉換為二進位制
反序列化:將二進位制轉換為物件
傳輸資料的時候只能傳輸二進位制,所以傳輸前需要序列化成二進位制,接收之後反序列化回來。
首先要將物件標記為序列化類
[Serializable] Class Person { public Person() { } }
在需要序列化的地方,使用BinaryFormatter類的Serialize方法
Person p = new Person(); using(FileStream fsWrite = new FileStream(path,FileMode.OpenOrCreate,FileAccess.Write)) { BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(fsWrite,p); }
- 在需要反序列化的地方,使用BinaryFormatter類的DeSerialize方法
using (FileStream fsRead = new FileStream(path,FileMode.OpenOrCreate ,FileAccess.Read)) { BinaryFormatter bf = new BinaryFormatter(); pp = (Person)bf.Deserialize(fsRead); } Console.WriteLine(pp.Age); Console.WriteLine(pp.Name );
部分類
partial關鍵詞
密封類
sealed關鍵詞
密封類不能夠被繼承的,但是可以繼承於別人
重寫類的ToString方法
ToString()方法是object類內的方法,虛方法
普通屬性和自動屬性
自動屬性也會自己生成一個欄位,但是自動屬性不允許有方法體,對值的限制在建構函式裡面寫
GUID
產生一個全球唯一的編號
Guid.NewGuid().ToString();
MD5加密
涉及到密碼的都必須要MD5加密
using System.Security.Cryptography;
using System.Text;
string s = GetMD5("123");
Console.WriteLine(s);
Console.ReadKey();
static string GetMD5(string str)
{
MD5 md5 = MD5.Create();
//開始加密
//需要將字串轉換為字元陣列
byte[] buffer = Encoding.Default.GetBytes(str);
//返回一個加密好的位元組陣列
byte[] MD5Buffer = md5.ComputeHash(buffer);
//將位元組陣列轉換為字串
//return Encoding.Default.GetString(MD5Buffer);
string strMD5 = "";
for (int i = 0; i < MD5Buffer.Length; i++)
{
strMD5 += MD5Buffer[i].ToString("X2").ToLower();
}
return strMD5;
}