學習面向對象編程OOP,相信絕大多數人對於OOP的訪問權限都不太清楚。public,private,protect修飾詞究竟用在何處,有什麼樣的效果。
但是,這些東西都不是我們今天要講的,如果不清楚請各位讀者去看專業書籍。
今天我在這裏要講的是一般書籍中不會涉及到的知識,那就是面向對象編程與面向實例編程。面向對象編程我們理解,那麼什麼是面向實例編程呢?
講到這裏,我想大多數接觸到OOP編程的讀者在入門OOP的時候,一定都是將對象類比爲現實中的物體來學習和認知OOP編程的吧。這對於開發者確實是最生動形象的例子,拿他出來做比喻無可厚非。很多人因此入門,但是,這種比喻同樣誤導了許多開發者的思路,認爲面向對象編程就如同現實世界同樣的抽象規律。其實這是錯誤的。我說現實世界中的對象概念與OOP編程的概念並不是同類。模仿現實世界的編程應該叫做面向實例編程。
在現實世界中,對象是一個獨立的個體,如果我們針對這種理念進行編程,那麼我們的程序中應該隱藏所有私有數據和方法,只保留公開數據和方法。但是OOP編程有些不同,我們來看實例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace FamiliarCSharp
{
class Program
{
private int valA = 0;Program(int m) { this.valA = m; } public void operateBrother(Program it) { Console.WriteLine("同類的private值:" + it.valA); } static void Main(string[] args) { Program v_a = new Program(20); Program v_b = new Program(400); v_a.operateBrother(v_b); Console.ReadKey(); }
}
}
這個例子中產生了合法的輸出400,證明了所有的訪問修飾符其實都是針對不同的類而言,對於同一種類,所有的數據都是公開的。OOP編程中的對象只是方法和數據的集合與傳統的類型沒有什麼區別,都是存儲空間與操作方法定義的有序集合的意思,不要對OOP的概念頂禮膜拜,其實它只是一個包裝,本質上在更大尺度上將編程重新拉到了基礎類型層面。