面向对象编程 (OOPs) 中封装与抽象的区别 (C#.NET)






4.62/5 (13投票s)
面向对象编程中封装和抽象的区别。
引言
如你所知,面向对象编程 (OOPs) 有四个主要特性。这些是
- 抽象
- 封装
- 继承
- 多态
在这四个特性中,我们将在本文中讨论前两个(抽象和封装)。
描述
那么,抽象和封装到底是什么呢?让我们通过一个例子来了解一下。
抽象
抽象是一种抽象或隐藏功能的手段,并仅向用户或其他程序员提供使用它的接口。例如,对于方法 Console.WriteLine()
,没有人知道函数调用背后实际发生了什么。我们只是通过调用并传递参数来使用它。这就是所谓的抽象。
封装
封装意味着将所有内容放入一个整体中,并提供给他人使用。就像一个剃须套装,包含了所有必要的工具。这些工具也可以在市场上单独购买。但是,剃须套装将所有工具封装在一个小包中,方便用户使用。
希望你现在对这两个特性都有了一个基本的了解。让我们来看一个封装和抽象的实际例子。
假设你需要创建一个方法来插入用户数据,并将其传递给其他开发人员使用。首先,创建一个类,并添加一个方法来验证数据并将其插入数据库。
将会有三个字段
- 名称
- 电子邮件
- 电话号码
因此,这些输入首先需要验证,然后才能插入数据库。
首先,创建一个包含所有方法的类
class User
{
public bool AddUser(string name, string email, string phone)
{
if (ValidateUser(name, email, phone))
{
if (AddtoDb(name, email, phone) > 0)
{
return true;
}
}
return false;
}
private bool ValidateUser(string name, string email, string phone)
{
// do your validation
return true;
}
private int AddtoDb(string name, string email, string phone)
{
// Write the Db code to insert the data
return 1;
}
}
如你所见,这个 User
类中编写了三个方法。
AddUser
:从类外部调用。这就是为什么访问修饰符是public
。validateUser
:用于验证用户详细信息。无法从类外部访问。它是private
。AddtoDb
:用于将数据插入数据库表,同样是private
,无法从类外部访问。
现在,另一个用户只需使用参数调用 AddUser
方法。该用户不知道方法内部实际发生了什么。我没有编写验证和插入数据库的代码,你可以从其他示例中获取。我们稍后会讨论它。
要调用 AddUser
方法,请执行以下操作
class Program
{
static void Main(string[] args)
{
User objUser = new User();
bool f = objUser.AddUser("Arka", "ark@g.com", "1234567890");
}
}
现在回到主要讨论。
这里,我们向其他用户隐藏了将数据添加到数据库的过程,这就是抽象。将所有三个方法放入一个 User
类中,并提供给其他用户使用,这就是封装。
因此,隐藏过程是抽象,而将所有必要的东西放入一个整体中是封装。
希望你已经解除了对封装和抽象概念的疑惑。