c#基础学习之封装

C#基础学习之封装

封装是面向对象编程三大特性之一,也是面向对象的基本概念之一。封装就是将数据和行为(方法)包装在类里面,隐藏内部实现的细节,使得外界代码无法直接访问和修改对象内部的数据,只能通过对象的公共方法来访问和修改对象的状态。封装可以提高代码的安全性和可维护性,提高代码的复用性和可扩展性。

封装的三要素

  • 访问修饰符:public、private、protected、internal、protected internal
  • 属性(get、set):控制对象的状态和访问权限
  • 方法(public、private、protected、virtual、abstract):完成某些特定功能,控制对象的行为

封装的特点

  • 隐藏了对象的内部实现,只对外公开了指定的方法和属性,保护了对象的安全性和可靠性
  • 封装是基于一个类进行的,从而实现了代码的复用。同一个类的不同对象对其属性方法的使用都是一样的,具有一般性
  • 封装增强了灵活性,使得代码易于受控,便于模块化

封装示例1

class Person {
    private string name;
    private int age;

    // 属性 (get/set)
    public string Name {
        get { return name; }
        set { name = value; }
    }
    public int Age {
        get { return age; }
        set { age = value; }
    }

    // 公共方法
    public void SayHi() {
        Console.WriteLine("Hi! My name is " + name + ", I'm " + age + " years old.");
    }  
}

在上面的示例代码中,我们定义了一个Person类,包括属性Name和Age,以及方法SayHi,这里Name和Age都是私有字段,通过公共属性来控制它们的访问权限。在SayHi方法中,我们可以通过this关键字来访问当前对象的属性,实现了对对象状态的访问。

封装示例2

class BankAccount {
    private string accountNo;
    private decimal balance;

    // 属性 (get/set)
    public string AccountNo {
        get { return accountNo; }
    }
    protected decimal Balance {
        get { return balance; }
        set { balance = value; }
    }

    // 方法
    public void Deposit(decimal amount) {
        Balance += amount;
    }
    public bool Withdraw(decimal amount) {
        if (Balance >= amount) {
            Balance -= amount;
            return true;
        }
        return false;
    } 
}

class SavingsAccount : BankAccount {
    public decimal CalculateInterest() {
        decimal interest = 0.01m * Balance;
        Deposit(interest);
        return interest;
    }
}

在上面的示例代码中,我们定义了一个BankAccount类,包括属性AccountNo和Balance,以及方法Deposit和Withdraw,这里AccountNo和Balance都是私有字段,通过公共属性来控制它们的访问权限。在Deposit和Withdraw方法中,我们可以通过Balance属性来访问对象状态,并通过set方法来修改对象状态。

另外,在SavingsAccount类中,我们继承了BankAccount类,并新增了一个CalculateInterest方法,通过Balance属性来计算利息,并通过Deposit方法将利息存入该账户。在这个过程中,Balance属性被BankAccount和SavingsAccount类各自控制,外界无法直接访问或修改其值,从而实现了对对象状态的封装。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c#基础学习之封装 - Python技术站

(0)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • ASP.NET连接SQL数据库的简单实例代码

    下面是ASP.NET连接SQL数据库的简单实例代码的攻略。 简介 在ASP.NET中,连接SQL数据库是一项很常见的任务。通过连接数据库,我们可以将数据存储在数据库中,并在需要的时候从数据库中检索这些数据。本攻略将引导您完成ASP.NET连接SQL数据库的简单实例代码。 步骤 步骤1:创建一个ASP.NET项目 首先,我们需要创建一个ASP.NET项目。可以…

    C# 2023年5月31日
    00
  • C#中数组、ArrayList、List、Dictionary的用法与区别浅析(存取数据)

    下面是关于C#中数组、ArrayList、List、Dictionary的用法与区别浅析(存取数据)的完整攻略。 数组 定义 数组是一种数据结构,可以在单个变量下存储多个值。在C#中,数组是由相同类型的元素组成的集合。可以使用数组来存储一个固定数量的元素,这些元素在创建数组时就已被确定。 用法 创建数组 在C#中创建数组,需要指定数组的长度,然后使用关键字n…

    C# 2023年5月31日
    00
  • C#控制台程序输出等腰三角形并居中显示实例

    创建控制台应用程序项目 首先,打开Visual Studio 2019,在首页面中选择“创建新项目”,选择“Visual C#”->“控制台应用程序”,并输入项目名称,点击“创建”按钮即可创建一个新的控制台应用程序项目。 编写输出等腰三角形的代码 在Main方法中编写输出等腰三角形的代码。我们可以用循环来实现这个功能,其中外层循环控制输出的行数,内层循…

    C# 2023年6月7日
    00
  • C#中WebBroeser控件用法实例教程

    C#中WebBrowser控件用法实例教程 简介 WebBrowser控件可用于在C# Windows窗体应用程序中加载网页或HTML文档。其使用方法也非常简单,本文将提供WebBrowser控件的用法实例教程。 步骤 1. 在Windows Form中添加WebBrowser控件 在Visual Studio中创建一个Windows窗体应用程序,并在窗体设…

    C# 2023年6月7日
    00
  • C#使用MSTest进行单元测试

    C#作为一门强类型语言,其灵活的语法和强大的功能已成为许多程序员首选的开发语言。在软件开发过程中,单元测试起到非常重要的作用,能够在最小的范围内对代码进行测试和验证,从而提高代码的质量和可靠性。MSTest是C#开发中广泛使用的单元测试框架之一,本文将详细介绍使用MSTest进行C#单元测试的完整攻略。 安装MSTest框架 MSTest是Visual St…

    C# 2023年5月15日
    00
  • Unity中 mesh生成斜坡的示例代码

    下面我为你详细讲解如何在Unity中生成斜坡的示例代码。 Unity中mesh生成斜坡的示例代码 1. 创建空白的GameObject 首先我们需要在场景中创建一个空白的GameObject。你可以在Unity的菜单栏中选择GameObject -> CreateEmpty来创建它。 2. 添加MeshFilter和MeshRenderer组件 选中G…

    C# 2023年5月15日
    00
  • 浅谈几种常见语言的命名空间(Namespace)

    下面是关于几种常见语言的命名空间的详细讲解。 什么是命名空间 命名空间(namespace)是一种定义某个作用域可见标识符的方式,它在多个标识符命名冲突时提供了一种解决方案。可以将命名空间视为一个容器或一个名字的前缀,用于将相关的标识符分组。命名空间在不同语言中的实现方式可能有所不同,但基本思想是相似的。 常见语言中的命名空间实现方式 以下是几种常见语言中的…

    C# 2023年6月1日
    00
  • C#通过属性名字符串获取、设置对象属性值操作示例

    下面来详细讲解一下“C#通过属性名字符串获取、设置对象属性值操作示例”的完整攻略。 1. 获取属性值 我们可以使用反射来获取对象的属性值。示例代码如下: var obj = new MyClass(); var propName = "Prop1"; // 要获取的属性名 var propValue = obj.GetType().Get…

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部