C#程序模块的封装

文章目录

  • 一、简单认识程序模块的封装
    • 1.1什么情况下使用封装?
    • 1.2 具体的例子
  • 二、实际当中的程序封装的应用
      • DLL的主要特点和用途:
      • 如何在C#中创建和使用DLL:

一、简单认识程序模块的封装

在C#中,程序模块的封装(Encapsulation)是面向对象编程(OOP)的一个核心原则之一。封装涉及将数据(属性)和数据处理的方法(函数或操作)组合在一起形成类,同时限制外部对这些数据的直接访问。它强调的是“信息隐藏”——类的内部状态不应该直接暴露给外部,而应通过方法(如公共方法)来访问和修改。

1.1什么情况下使用封装?

  • 当你希望隐藏类的实现细节时,使用封装可以保护类的状态不被非法访问或意外修改。
  • 当你想要控制类成员的访问级别时,例如,使一些成员是私有的,而其他成员是公共的。
  • 当你想要对设置或获取类的属性值增加额外的逻辑(如验证)时。

1.2 具体的例子

以下是一个简单的C#类的例子,展示了封装的概念:

public class BankAccount
{
    // 私有字段,封装了账户余额的实现细节
    private decimal balance;

    // 构造函数
    public BankAccount(decimal initialBalance)
    {
        balance = initialBalance;
    }

    // 公共方法来封装对私有余额字段的访问
    public void Deposit(decimal amount)
    {
        if (amount > 0)
        {
            balance += amount;
        }
    }

    public bool Withdraw(decimal amount)
    {
        if (amount > 0 && balance >= amount)
        {
            balance -= amount;
            return true;
        }
        return false;
    }

    // 公共属性来获取余额,封装了获取余额的细节
    public decimal Balance
    {
        get { return balance; }
    }
}

class Program
{
    static void Main(string[] args)
    {
        BankAccount account = new BankAccount(1000);
        account.Deposit(500);
        bool success = account.Withdraw(200);
        Console.WriteLine($"Account balance: {account.Balance}");
    }
}

在这个例子中,BankAccount 类通过将 balance 字段设置为私有(private),隐藏了其实现细节。它只能通过 DepositWithdraw 方法来修改,这些方法封装了如何安全地变更余额。此外,Balance 属性允许外部代码获取余额,但不允许直接设置它,确保了余额不会被随意修改,只能通过类提供的方法来操作。这正是封装在C#中的使用实例。
这个例子可能有些抽象,没关系,下一个例子将讲解一下具体操作。.

二、实际当中的程序封装的应用

问题提出:有一个计算机类的项目,程序员1负责编写计算的程序,沉香谷员2负责编写计算类以外的任务,现在由2进行自己程序的维护,但是不让让2看见1写的程序,我们来看怎么通过程序封装实现。
我们来分析一下,要完成这样的事情,那么两个人写的程序一定不能写在同一个项目中,那我们可以可以使用程序集(通常是DLL文件)来实现源代码的隐藏与封装。程序员1可以将计算器类编译到一个独立的类库(DLL文件)中,程序员2则只能通过编译后的DLL文件和公开的接口来使用计算器功能,无法看到源码。这种方式既封装了计算器的实现细节,又满足了客户关于源码保密的需求。那什么是DLL文件呢?
//

在C#和其他.NET语言中,DLL文件是“动态链接库”(Dynamic Link Library)的缩写。DLL文件是包含程序代码和资源的文件,它们可以被多个程序同时使用。在.NET环境中,DLL通常是编译后的代码库,包含了可以由其他.NET应用程序引用和使用的类和方法。

DLL的主要特点和用途:

  1. 代码重用
    DLL允许开发者将通用的功能编译成单独的文件,这样多个应用程序可以共享同样的代码,而不需要重复编写相同的功能。

  2. 模块化
    通过将功能分割成不同的DLL文件,开发者可以创建模块化的应用程序,使得维护和更新变得更加容易。

  3. 内存节省
    当多个程序运行时,如果它们使用相同的DLL,则该DLL在内存中只需要有一个副本,这有助于节省系统资源。

  4. 部署和更新
    更新DLL文件通常比整个应用程序更简单,因为只需要替换掉旧的DLL文件。只要接口保持不变,使用DLL的应用程序不需要任何修改就能继续工作。

  5. 安全性和访问控制
    DLL可以实现封装和信息隐藏,开发者可以选择公开特定的接口,同时隐藏实现细节,从而提供更安全的编程环境。

在C#中,创建DLL文件通常涉及到定义一个或多个类的类库项目,然后编译这个项目。编译后的输出就是一个DLL文件,它可以被其他C#项目或.NET项目引用。

如何在C#中创建和使用DLL:

创建DLL(类库):

  1. 在Visual Studio中创建一个新的“类库”项目。
  2. 添加你想要封装在DLL中的代码。
  3. 编译项目以生成DLL文件。

使用DLL:

  1. 在你的应用程序项目中添加对DLL文件的引用。
  2. 使用DLL中定义的命名空间。
  3. 创建实例或调用DLL中的类和方法。

DLL在.NET开发中非常常见,使得代码分享、分发和维护变得更加高效。
/

我们使用的其实就是DLL的第五个功能。

比如我们创建一个窗体应用程序,做一个简单的加式:
在这里插入图片描述
这个是程序的界面,我们前面说了,计算程序部分由1来完成,这部分不可被2看见,所以我们把2的程序用DLL封装。接下来我们进行1的任务,我们要用鼠标右击解决方案,添加新建项目,选择类库,进行命名,这里我把类库命名为CalDemo
在这里插入图片描述

我们就在这个类库的class文件里面写入1的程序,也就是那个加式的程序:
在这里插入图片描述然后在解决方案资源管理器里面右击新建的类库,点击生成,这样我们的DLL 文件就有了。
接下来我们在最开始的文件,也就是窗体应用程序,右击解决方案资源管理器中的引用,然后添加引用,在项目-解决方案中找到后来建立的项目,进行添加:
在这里插入图片描述
这样两个模块之间就有关系了,然后对下面的界面按钮进行编辑:
在这里插入图片描述
不过要记得引入命名空间,也就所添加的文档,这里是 using CalDemo;就是在前面添加引用的那个文件的名称。然后就可以使用1所写程序里面的方法了,也就是一个简单的加法。
在这里插入图片描述
这样就达到了我们想要的效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/431698.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构中红黑树的概念以及代码

红黑树(Red-Black Tree)是一种自平衡的二叉搜索树,它在插入和删除节点时通过一系列的旋转和重新着色操作来保持平衡。红黑树的平衡性质使得它的查找、插入和删除操作的时间复杂度都能保持在 O(log n) 红黑树的定义如下: 每个节点要…

qt cmake添加resource文件

文章目录 方式一:方式二:qrc的使用 两种方式 方式一: 创建一个qrc文件,在qt_add_executable 中直接添加 qt_add_executable(helloworldmain.cppimageresources.qrc )方式二: 使用 qt_add_resources qt_add_resources(helloworld "app_images"PREFIX &…

dolphinscheduler海豚调度(四)钉钉告警

在之前的博文中,我们已经介绍了DolphinScheduler海豚调度的基本概念和工作流程,以及Shell任务和SQL任务的实践。今天,让我们来学习DolphinScheduler中的另一个重要功能:钉钉告警。 钉钉群添加机器人 在钉钉群添加机器人&#xf…

三国野史秘闻翻译视频剪辑 条条爆品 一条视频增粉1w (附888G素材内容)

我将为大家分享一个全新的主题——三国野史秘闻。这个主题本身就充满了趣味性,再加上我们独特的解读,由于粉丝们对此类内容非常热衷,因此很容易在评论区引发热烈讨论,这使得我们的短视频有很大的机会在抖音上走红。 项目 地 址 &…

基于springboot的学生网上请假系统设计与实现论文

学生网上请假系统 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了学生网上请假系统的开发全过程。通过分析学生网上请假系统管理的不足,创建了一个计算机管理学生网上请假系统的方案。文章介绍了学…

React富文本编辑器开发(六)

现在,相关的基础知识我们应该有个大概的了解了,但离我们真正的开发出一个实用型的组件还有一段距离,不过不用担心,我们离目标已经越来越近。 以现在我们所了解的内容而言,或许你发现了一个问题,就是我们的编…

ICASSP2024 | ICMC-ASR 车载多通道语音识别挑战赛总结

为促进驾驶场景中语音处理和识别研究,在ISCSLP 2022上成功举办智能驾驶座舱语音识别挑战 (ICSRC)的基础上,西工大音频语音与语言处理研究组 (ASLPNPU)联合理想汽车、希尔贝壳、WeNet社区、字节、微软、天津大学、南洋理工大学以及中国信息通信研究院等多…

splay学习笔记重制版

以前写的学习笔记:传送门 但是之前写的比较杂乱,这里重制一下 问题背景 假设我们要维护一个数据结构,支持插入、删除、查询某个值的排名,查询第 k k k大的值等操作。 最直接的想法是用二叉搜索树,也就是左子树权值&l…

Tomcat实现java博客项目、状态页及常见配置介绍

目录 一、自建博客 1. 项目背景 2. 操作示例 二、状态页 1. 概述 2. server status 信息状态页 3. manager app 项目管理状态页 4. host manger 虚拟主机管理状态页 三、常见配置 1. 端口8005/tcp安全配置管理 2. tomcat端口号 3. 虚拟主机设置 4. Context配置 一…

2024年第一届CS2major,新胶囊即将发行,需要提前做哪些布局

2024年第一届CS2major,将会在3月17日哥本哈根开始。 所以: 1、新的胶囊大概率会在3月10日左右发布。 2、网传战队挂坠,不知道是否会出现?(原本出现过战队布章包,由于销量太差,第二届就取消了…

【Qt】Qwidget的常见属性

目录 一、Qwidget核心属性 二、enable属性 三、geometry属性 四、 WindowFrame的影响 五、windowTitle属性 六、windowIcon属性 七、qrc文件管理资源 八、windowOpacity属性 九、cursor属性 十、font属性 十一、toolTip属性 十二、focusPolicy属性 十三、styleShe…

Mysql面试总结

基础 1. 数据库的三范式是什么? 第一范式:强调的是列的原子性,即数据库表的每一列都是不可分割的原子数据项。第二范式:要求实体的属性完全依赖于主关键字。所谓完全 依赖是指不能存在仅依赖主关键字一部分的属性。第三范式&…

redis09 集群(cluster)

思维草图 为什么要使用集群 单台redis内存容量的限制单台redis并发写量太大有性能瓶颈 redis集群认识 redis集群是对redis的水平扩容,即启动N个redis节点,将整个数据分布存储在这个N个节点中,每个节点存储总数据的1/N。 如下图&#xff1…

LVS负载均衡集群+NAT部署

一. LVS集群相关知识 1. 集群和分布式 系统性能扩展方式: Scale UP:垂直扩展,向上扩展,增强,性能更强的计算机运行同样的服务 升级单机的硬件设备 Scale Out:水平扩展,向外扩展,增加设备,并行…

光影交织:汽车穿越隧道的视觉盛宴

在繁忙的城市中,隧道成为了连接两端的重要通道。而对于汽车来说,穿越隧道不仅是一次简单的空间转移,更是一场融合了视觉、技术与安全的独特体验。 当汽车缓缓驶入隧道,外界的光线逐渐减弱,隧道内部的光线开始发挥作用。…

c++中多种类型sort()排序的用法(数组、结构体、pair、vector)

c中多种类型sort排序的用法 一、对数组排序1、默认排序2、自定义排序 二、对结构体进行排序三、对pair进行排序1、默认排序2、自定义排序 四、对vector进行排序1、默认排序2、去重排序3、自定义排序 一、对数组排序 1、默认排序 默认从小到大进行排序 #include <bits/std…

如何解决幻兽帕鲁/Palworld服务器联机游戏时的丢包问题?

如何解决幻兽帕鲁/Palworld服务器联机游戏时的丢包问题&#xff1f; 等待服务器维护&#xff1a;首先&#xff0c;确保网络连接稳定&#xff0c;然后查看游戏官方或社区论坛&#xff0c;了解是否有服务器维护的消息。这是解决丢包问题的一种直接且有效的方法。 更新显卡驱动&a…

讲讲地理人,可能没有想过的就业方向!建议收藏

先说下大家比较熟悉的就业去向&#xff0c;也是绝大多是人会优先考虑并规划的就业方向。 1、考编制&#xff0c;去初、高中做地理老师。这是师范类高校或女生主要的就业方向&#xff0c;一般都是重点高中&#xff0c;待遇、社会地位都还不错。 2、去大专院校或本科院校做老师、…

解决uni-app中使用webview键盘弹起遮挡input输入框问题

这个平平无奇的回答&#xff0c;可能是全网最靠谱的解决方案。 这里我用的是vue3 setup .vue文件的方式 <view> <web-view :fullscreen"false" :webview-styles"{top: statusBarHeight40,height:height,progress: {color: green,height:1px } }"…

Claude 3 模型发布,压力来到OpenAI这边了~

Anthropic 发布了 Claude 3 系列&#xff0c;包含了三款模型 各具特色&#xff0c;旨在为用户提供更智能、更快速、更高效的选择&#xff0c;可以说是是迄今为止最快、最强大的人工模型&#xff01; Anthropic 一度是 OpenAI 最强力的竞争对手&#xff01; 随着 Claude3 的发…