学习面向对象编程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的概念顶礼膜拜,其实它只是一个包装,本质上在更大尺度上将编程重新拉到了基础类型层面。