一.封裝安全
向對象程序設計中,一個很是重要的技術即是封裝,也就是把客觀事物封裝成抽象的類,而且類能夠把本身的數據和方法只讓可信的類或者對象操做,對不可信的進行信息隱藏。這樣作的好處在於可使類內部的具體實現透明化,只要其餘代碼不依賴類內部的私房數據,你即可以安心修改這些代碼。此外,這樣作也是出於安全方面的考慮,若是表明網上支付卡密碼的變量隨便就能夠被訪問到,這樣的系統誰還敢用呢?ide
訪問修飾符:函數
Private:只有類自己能存取.
Protected:類和派生類能夠存取.
Internal:只有同一個項目中的類能夠存取.
Protected Internal:是Protected和Internal的結合. spa
Public:徹底存取.設計
實例代碼 指針
class Operation //運算基類 { private double _numberA = 0; private double _numberB = 0; public double NumberA { get { return _numberA; } set { _numberA = value; } } public double NumberB { get { return _numberB; } set { _numberB = value; } } public virtual double GetResult() //定義虛方法 { double result = 0; return result; } }
上面 Operation類中字斷與方法 就實現了一個封裝。code
二.多態對象
1、多態:同一操做做用於不一樣的對象,能夠有不一樣的解釋,產生不一樣的執行結果。在運行時,能夠經過指向基類的指針,來調用實現派生類中的方法。blog
編譯時的多態性:
編譯時的多態性是經過重載來實現的。對於非虛的成員來講,系統在編譯時,根據傳遞的參數、返回的類型等信息決定實現何種操做。
運行時的多態性:
運行時的多態性就是指直到系統運行時,才根據實際狀況決定實現何種操做。C#中,運行時的多態性經過虛成員實現。
編譯時的多態性爲咱們提供了運行速度快的特色,而運行時的多態性則帶來了高度靈活和抽象的特色。繼承
2、實現多態:
3、override關鍵字:
重寫父類中的virtual修飾的方法,實現多態。
三.繼承
繼承主要實現重用代碼,節省開發時間。
1、C#中的繼承符合下列規則:
2、new關鍵字
若是父類中聲明瞭一個沒有friend修飾的protected或public方法,子類中也聲明瞭同名的方法。則用new能夠隱藏父類中的方法。(不建議使用)
3、base關鍵字
base 關鍵字用於從派生類中訪問基類的成員:
子類繼承基類,並重寫父類計算虛方法
class OperationAdd : Operation { public override double GetResult() { double result = 0; result = NumberA + NumberB; return result; } } class OperationSub : Operation { public override double GetResult() { double result = 0; result = NumberA - NumberB; return result; } } class OperationMul : Operation { public override double GetResult() { double result = 0; result = NumberA * NumberB; return result; } } class OperationDiv : Operation { public override double GetResult() { double result = 0; if (NumberB != 0) result = NumberA / NumberB; else Console.WriteLine("除數不能爲零!\n"); return result; } }
運算對象生產工廠
class OperationFactory //運算對象生產工廠 { public static Operation createOperation(string operation) { Operation oper = null; switch(operation) { case "+": { oper = new OperationAdd(); break; } case "-": { oper = new OperationSub(); break; } case "*": { oper = new OperationMul(); break; } case "/": { oper = new OperationDiv(); break; } } return oper; } }
Main方法
class Program { static void Main(string[] args) { Operation oper; Console.WriteLine("請輸入運算符:\r\n"); oper = OperationFactory.createOperation(Console.ReadLine());//調用簡單工廠類 Console.WriteLine("請輸入第一個數:\r\n"); oper.NumberA = int.Parse(Console.ReadLine()); Console.WriteLine("請輸入第二個數:\r\n"); oper.NumberB = int.Parse(Console.ReadLine()); double result = oper.GetResult(); Console.WriteLine("運算結果:\r\n"); Console.WriteLine(oper.NumberA.ToString() +"+"+ oper.NumberB.ToString() + "=" + result.ToString()); Console.ReadLine(); }
簡單計算器的類圖