在C#基礎知識之類和結構體中我詳細記錄了類、類成員、重載、重寫、繼承等知識總結。這里就記錄一下對面向對象和面向對象三大特性的廣義理解。
一、理解面向對象
類是面向對象編程的基本單元,面向對象思想其實就是教給我們如何合理的運用類的規則去編寫代碼。
二、理解面向對象的三大特性
1、封裝
封裝就是通過給類及類中的成員變量、屬性和方法設置不同的訪問修飾符(public、protected、internal、protected internal、private)來控制它們的作用范圍,以達到封裝的目的。
2、繼承
什么是繼承?顧名思義,就是子類根據C#的規則 繼承父類的方法或者數據成員的一種方式。
注意事項:
(1)C# 不支持多重繼承。但是,您可以使用接口來實現多重繼承

//基類 class Shape { public void setWidth(int w) { width = w; } public void setHeight(int h) { height = h; } protected int width; protected int height; } // 接口 PaintCost public interface PaintCost { int getCost(int area); } // 派生類 class Rectangle : Shape, PaintCost { public int getArea() { return (width * height); } public int getCost(int area) { return area * 70; } } class RectangleTester { static void Main(string[] args) { Rectangle Rect = new Rectangle(); int area; Rect.setWidth(5); Rect.setHeight(7); area = Rect.getArea(); // 打印對象的面積 Console.WriteLine("總面積: {0}", Rect.getArea()); Console.WriteLine("油漆總成本: ${0}" , Rect.getCost(area)); Console.ReadKey(); } }
(2)一個對象用父類聲明,使用子類實例化的三種情況
1>一般情況下:你用正常的辦法訪問不到子類自己的成員,只能訪問到從父類繼承來的成員。
2>在子類中用 override 重寫父類中用 virtual 申明的虛方法的情況下,執行時調用的是子類中重寫的方法;
執行結果
3>如果子類中用 new 覆蓋父類中用 virtual 申明的虛方法情況下,執行時調用的是父類中的虛方法;
運行結果
深究其原因,為何兩者不同,是因為原理不同: override是重寫,即將基類的方法在派生類里直接抹去重新寫,故而調用的方法就是子類方法;而new只是將基類的方法在派生類里隱藏起來,故而調用的仍舊是基類方法。
3、多態
(1)概念:如何理解多態?多態性意味着有多重形式。在面向對象編程范式中,多態性往往表現為"一個接口,多個功能"。總體而言,就是調用相同的方法,表現出不同的行為,稱之為多態。
(2)多態性的常見體現:虛方法、抽象類、接口