65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.62/5 (13投票s)

2015 年 10 月 8 日

CPOL

2分钟阅读

viewsIcon

159792

面向对象编程中封装和抽象的区别。

引言

如你所知,面向对象编程 (OOPs) 有四个主要特性。这些是

  1. 抽象
  2. 封装
  3. 继承
  4. 多态

在这四个特性中,我们将在本文中讨论前两个(抽象和封装)。

描述

那么,抽象和封装到底是什么呢?让我们通过一个例子来了解一下。

抽象

抽象是一种抽象或隐藏功能的手段,并仅向用户或其他程序员提供使用它的接口。例如,对于方法 Console.WriteLine(),没有人知道函数调用背后实际发生了什么。我们只是通过调用并传递参数来使用它。这就是所谓的抽象。

封装

封装意味着将所有内容放入一个整体中,并提供给他人使用。就像一个剃须套装,包含了所有必要的工具。这些工具也可以在市场上单独购买。但是,剃须套装将所有工具封装在一个小包中,方便用户使用。

希望你现在对这两个特性都有了一个基本的了解。让我们来看一个封装和抽象的实际例子。

假设你需要创建一个方法来插入用户数据,并将其传递给其他开发人员使用。首先,创建一个类,并添加一个方法来验证数据并将其插入数据库。

将会有三个字段

  1. 名称
  2. 电子邮件
  3. 电话号码

因此,这些输入首先需要验证,然后才能插入数据库。

首先,创建一个包含所有方法的类

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 类中,并提供给其他用户使用,这就是封装。

因此,隐藏过程是抽象,而将所有必要的东西放入一个整体中是封装。

希望你已经解除了对封装和抽象概念的疑惑。

© . All rights reserved.