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日

相关文章

  • C#使用 Salt + Hash 来为密码加密

    下面是关于使用Salt + Hash为密码加密的攻略: 准备工作 为了使用Salt+Hash技术来为密码加密,需要使用到以下工具: C#编程语言 System.Security.Cryptography命名空间 在开始之前需要确保你的开发环境有上述工具,并已经正确安装和配置。 生成Salt Salt是一个随机字符串,被添加到密码中,以增加加密难度。在C#中,…

    C# 2023年6月8日
    00
  • KMP算法的C#实现方法

    KMP算法的C#实现方法 概述 KMP算法是一种字符串匹配算法,可以用于快速查找一个字符串是否包含另一个字符串,或者在多个字符串中查找某个子串。该算法的基本思想是尽可能地避免重复匹配。通过预处理模式串的匹配数组,我们可以在匹配过程中跳过已经匹配过的部分,从而提高匹配效率。 算法实现 步骤一:求取模式串的匹配数组 首先,我们需要对模式串进行预处理,求取出模式串…

    C# 2023年6月7日
    00
  • jQuery的Ajax时无响应数据的解决方法

    当使用jQuery进行Ajax请求时,有可能会发生无法获得响应数据的情况,这可能是由于多种原因引起的。下面是一些可能导致这种情况的原因和解决方案的完整攻略。 原因分析 服务器端响应数据编码问题:如果服务器端传回的数据编码与前端不同,就有可能出现乱码或无响应数据的情况。 跨域问题:Ajax请求跨域请求时,服务器端需要设置CORS或JSONP跨域访问。 数据格式…

    C# 2023年6月6日
    00
  • C#使用System.Environment获取电脑的相关属性

    关于C#使用System.Environment获取电脑的相关属性的攻略,以下是我总结的步骤: 步骤一:引用命名空间 在使用System.Environment类获取电脑的相关属性之前,需要先引用命名空间using System;。 步骤二:使用System.Environment类中的方法获取电脑的相关属性 System.Environment类中提供的方…

    C# 2023年6月7日
    00
  • c#反射机制学习和利用反射获取类型信息

    C#反射机制学习和利用反射获取类型信息 反射是C#语言中的一种高级特性,它允许程序在运行时查看和操作代码中的类型、属性和方法。开发人员可以利用反射获取类型信息,并创建对象、调用方法或访问属性,这使得程序的代码更加动态和灵活。 反射的基本概念 类型、程序集和命名空间 在C#中,类型是指类、接口、枚举、结构体等定义。程序集是一组关联的类型,可以打包为DLL或EX…

    C# 2023年5月15日
    00
  • 详解ASP.NET Core 网站发布到Linux服务器

    详解ASP.NET Core 网站发布到Linux服务器 在ASP.NET Core中,我们可以将网站发布到Linux服务器上。本攻略将详细介绍如何将ASP.NET Core网站发布到Linux服务器上,并提供两个示例说明。 准备工作 在将ASP.NET Core网站发布到Linux服务器之前,我们需要完成以下准备工作: 安装.NET Core SDK和AS…

    C# 2023年5月16日
    00
  • 在winform下实现左右布局多窗口界面的方法

    在WinForm下实现左右布局多窗口界面的方法 1. 思路 在WinForm下实现左右布局多窗口界面,主要的思路是使用SplitContainer控件。SplitContainer控件可分裂成两个窗格,一个在左侧,一个在右侧,可以用来容纳两个不同的控件,以实现布局。 2. 实现步骤 2.1 创建SplitContainer 在VS中创建WinForm窗口,从…

    C# 2023年6月7日
    00
  • unity 如何判断鼠标是否在哪个UI上(两种方法)

    下面是关于Unity如何判断鼠标是否在哪个UI上的两种方法的详细攻略。 方法一:使用事件系统 Unity提供了一个事件系统,可以检测输入事件的对象。以下是该方法的步骤: 首先,在代码中获取事件系统组件: using UnityEngine.EventSystems; private EventSystem eventSystem; void Start ()…

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