C#的一些重要知識總結
阿新 • • 發佈:2020-12-23
1. 訪問修飾符
1). 有4個訪問修飾符:
private :只有當前類可用
protected :當前類和後代可用
internal :當前專案可用
public: 訪問不受限制
2). 放在哪裡?
訪問修飾符 | 資料型別前面 | 資料型別的成員前面 |
---|---|---|
private | 不能 | OK【預設】 |
protected【重點】 | 不能 | OK |
internal | OK[預設] | OK |
public | OK | OK |
3)base的作用,呼叫父類的構造方法和父類的其它成員(包括protected訪問型別的成員。
using System; // 子類要呼叫父類中protected的成員,要用base.或者直接寫名字呼叫。 namespace ConsoleApp2 { class Program { static void Main(string[] args) { //Animal animal = new Animal(); Dog dog = new Dog(); dog.CallAnimal(); } } class Animal { public void Eat() { Console.WriteLine("the Animal eats"); } protected void Bark() { Console.WriteLine("the Animal barks"); } } class Dog:Animal { public void CallAnimal() { base.Eat(); Bark(); } } }
輸出結果為:
2種程式碼複用的方式
繼承:程式碼複用的基本方式。子類擁有所有父類的非私有成員。
note:建構函式不能繼承。
attention:建立子類時,自動呼叫父類的建構函式,並且父類中的先執行
組合:程式碼複用的基本方式
**共性:**程式碼複用;
不同:
繼承可以程式碼複用,也能概念複用; 缺點:耦合度高。
組合僅僅是程式碼複用,不能夠概念複用。【整體,部分】 優點:耦合度低。
原則:使用組合而非繼承 (複用的最佳實踐)。因為耦合度低。但也要具體問題具體分析。
語法:
繼承:
組合:class A {B b;}
實際問題的處理:
技巧 A B 1)is 判斷 繼承
2)is 不成立 has 判斷成立 組合
人 大腿
輸入控制 馬達
面向物件的設計原則
面向物件的設計原則【學oop之前瞭解 之後掌握】
把名稱記住!
1開-閉原則 (目標) :對擴充套件開放,對修改關閉
理想化的目標!
需求1:寫了一段程式碼【類,元件,系統】
game1 類Class1:F1,F2
需求2:game2 類F1,F2,F3 怎麼辦?
方法1:開啟類Class1,增加一個F3
方法2:繼承 Class2:Class1{F3}
介面,組合,………
有的總是需要 對原來的做一定的修改!
移動網際網路:手機 手機作業系統
Ios之前,微軟早就有了 mobile》WP7 8
2類的單一職責(一個類的定義)
設計,抽象得到的類:功能不要太多,越少越好,
學生:上課,聽課,考試,講課【晨講】爭議?
老師:講課,備課!
一個類有且只有一個改變它的原因【少】 易複用,易維護!
3面向介面程式設計而非面向實現 (寫一個類時從哪入手)
先做好一個好對外的介面(公有的方法),實現不是第一步要思考.
先思考做什麼,為其他的元件提供什麼功能,而不是去先思考功能的實現
4使用組合而非繼承 (複用的最佳實踐)
如果僅僅為了複用優先選擇組合複用,而非繼承複用。
組合的耦合性對繼承低
5依賴倒置 ( 依賴抽象)
客戶端程式碼儘量依賴抽象的元件,因為抽象的是穩定的。實現是多變的。
6里氏替換 (繼承後的重寫)
父類出現地方可以被子類替換掉。要保護替換前的原有的工作,在替換後依然保持不變
子類在重寫父類方法時,儘量選擇擴充套件重寫。
7介面隔離 (功能拆分)
儘量定義小而精的介面,少定義大而全的介面
小介面之間功能隔離,實現類需要多個功能時可以選擇多實現.或介面之間做繼承
8迪米特法則 (類與類互動的原則)
不要和陌生人說話【原則】
類與類互動時,在滿足功能要求的基礎上,
傳遞的資料量越少越好.因為這樣可能降低耦合度,便於替換 class1 一個呼叫 class2
1) 男孩子 夥伴
2) 軟體中:方法呼叫少;引數越少越好 F1 F2(int)(int,string,int)
追求的目標:程式碼低耦合 好!便於替換
高耦合 兩個物件 頭 軀幹 連線 脖子 複雜 人真人
低耦合 假人:玩具,芭比娃娃 換頭!