编程技术是改变世界的力量。
本站
当前位置:网站首页 > 后端语言 > 正文

C# - 面向对象之封装特性 071

gowuye 2024-05-16 14:55 4 浏览 0 评论

封装是面向对象编程的三大特性之一,其作用就是隐藏内部具体实现,供给外部一个统一接口,如类的封装,不需要知道类内部是怎么实现的,只需要知道调用类中指定的属性和方法就能实现功能相关的功能;其类与对象本身就是封装的体现

比如遥控器,只需点某个按钮就能切换电视台,音量,开关电视等,具体使用遥控器的人根本不需要知道遥控器内部是怎么实现的,其里面组成的零件与控制程序如何的更新换代,使用人无需重新学习使用方法

和遥控器类似,面向对象的封装就是把事物的特征和行为封装在类中(类中体现就是属性与方法)使用类的人不需要知道类内部是怎么实现的,只要调用其属性和方法就能实现其功能

封装的具体体现

1.属性封装了字段

示例1:将性别的字段封装为属性

封装方式1:将属性值存储在私有字段gender中

封装方式2:将属性值存储在d:\Person_gender.txt文本文件中

存储在文本文件中

封装方式3:将属性值转换为数据库bit类型识别的值,存储起来

内部存储在数据库中

 class Person
 {
     //private bool gender;
     ////封装1 将值存储在字段中
     //public bool Gender
     //{
     //    get { return gender; }
     //    set { gender = value; }
     //}

     //private bool gender;
     ////封装2 将值存储在如文本文件或数据库中
     //public bool Gender
     //{
     //    get
     //    {
     //        //从文本文件中读取出来
     //        return Convert.ToBoolean(File.ReadAllText(@"d:\Person_gender.txt"));
     //    }
     //    set
     //    {
     //        //把性别属性的值存储在
     //        //Person_gender.txt文本文件中
     //        File.WriteAllText(@"d:\Person_gender.txt", value.ToString());
     //    }
     //}

     private bool gender;
     //封装3 将属性值转换为数据库认识的值
     //假设数据库中以bit类型存储
     //bit只能存储0与1
     public bool Gender
     {
         get
         {
             //外部使用的是数据库中的值
             return Convert.ToBoolean(int.Parse(File.ReadAllText(@"d:\Person_gender.txt")));
         }
         set
         {
             if (value == true)
             {
                 //存储在数据库中
                 //将true转换为1,false转换为0
                 //在此以文本文件当做是数据库                 简化
                 File.WriteAllText(@"d:\Person_gender.txt", 1.ToString());
             }
             else
             {
                 File.WriteAllText(@"d:\Person_gender.txt", 0.ToString());
             }
             gender = value;
         }
     }
 }
 class Program
 {
     static void Main(string[] args)
     {
         Person p1 = new Person();
         //外部只需赋值
         p1.Gender = true;
         //外部只需取值
         Console.WriteLine(p1.Gender);
         //外部无需做任何改变
         //只通过属性赋值取值即可
         Console.ReadKey();
     }
 }

2.方法的多个参数封装成了一个对象

示例2:将学生的姓名,性别,年龄等比较多的信息通过参数传入方法中,特别是该方法又是中间方法中的一个,通过此方法又需要一个一个的传递给下一个方法,这样写比较麻烦,因此可以将这些信息封装在一个类中,方法只需传递一个参数即可

使用封装后的类传递参数

//实现方法
//多个参数
static void ShowInfo(string name, char gender, int age)
{
    //ShowInfo()只是过渡方法
    //由ShowMsg()方法具体实现
    ShowMsg(name, gender, age);
}
static void ShowMsg(string name, char gender, int age)
{
    Console.WriteLine("我叫 {0} ,性别为 {1} ,今年 {2} 岁", name, gender, age);
}
//调用方法
 static void Main(string[] args)
 {
   ShowInfo("张三", '男', 18);
   Console.ReadKey();
 }
//======通过封装后的类传递参数==================
class Student
{
    public string Name { get; set; }
    public char Gender { get; set; }
    public int Age { get; set; }
}

 static void ShowInfo(Student stuZs)
 {
     //ShowInfo()只是过渡方法
     //由ShowMsg()方法具体实现
     ShowMsg(stuZs);
 }
 static void ShowMsg(Student stuZs)
 {
     Console.WriteLine("我叫 {0} ,性别为 {1} ,今年 {2} 岁", stuZs.Name, stuZs.Gender, stuZs.Age);
 }
//调用方法
static void Main(string[] args)
{
  Student stuZs = new Student();
  stuZs.Name = "李四";
  stuZs.Gender = '女';
  stuZs.Age = 20;
  ShowInfo(stuZs);
  Console.ReadKey();
}

以后会有示例:通过递归将地区表绑定在窗体应用程序的下拉菜单控件时,将显示的文本与对应的id绑定需要同时在控件上,这也需要通过封装完成,到时再说

其他的体现如将一堆代码封装到了一个方法中;将一些功能封装到了几个类中;将一些具有相同功能的代码封装到了一个程序集中(.dll/.exe);将一些属性或方法设置为私有的(private),受保护(protected)级别,只有类内部使用,外部访问不到等等;封装后只需给外部提供统一的访问接口(属性/方法名等)即可

相关推荐

Nginx 响应提速10倍,你需要知道的缓存性能优化——FastCGI调优
Nginx 响应提速10倍,你需要知道的缓存性能优化——FastCGI调优

Nginx缓存优化是帮助大家提升网站性能的重要操作之一,proxy_cache主要用于反向代理时,对后端内容源服务器进行缓存;fastcgi_cache主要用于...

2024-05-20 14:44 gowuye

王者荣耀天魔缭乱和逐梦之音返场活动地址 3月22日开启返场活动
王者荣耀天魔缭乱和逐梦之音返场活动地址 3月22日开启返场活动

王者荣耀官方终于确定了天魔缭乱和逐梦之音的返场活动,这让不少小伙伴乐开了花,返场活动将会在3月22日开启,下面就带来王者荣耀天魔缭乱和逐梦之音返场活动地址!王者...

2024-05-20 14:44 gowuye

常见的嵌入式web服务器有哪些?

嵌入式WEB服务器常见的有:Lighttpd,Shttpd,Thttpd,Boa,Mini_httpd,Appweb,Goahead。Lighttpd地址:http://www.light...

简述几款常见的嵌入式web服务器
简述几款常见的嵌入式web服务器

嵌入式web服务器,是web服务器当中的一种,是基于嵌入式系统而实现的web服务器。指的是在嵌入式系统(通俗点就是单片机系统)上实现的一个web服务器,可以通过...

2024-05-20 14:44 gowuye

教你如何利用fastcgi_cache缓存加速WordPress

在使用nginx缓存之前,必须在nginx里面加载专门的模块,这个模块叫做ngx_cache_purge。添加ngx_cache_purge模块下载ngx_cache_purge模块ngx_cache...

扫描WordPress漏洞

检测已知漏洞WPScan是一款广泛使用的WordPress安全扫描工具,它的一项重要功能是检测已知漏洞。在这篇文章中,我们将深入探讨WPScan如何检测已知漏洞,并结合实际示例,帮助读者更好地理解和应...

消灭 Bug!推荐几个给力的开源 Bug 跟踪工具
消灭 Bug!推荐几个给力的开源 Bug 跟踪工具

在这个充满bug的世界里,最遥远的距离不是生与死,而是你亲手制造的bug就在你眼前,你却怎么都找不到它。因此本文准备了7款优秀的开源bug跟踪系...

2024-05-20 14:43 gowuye

生物信息分析入门全攻略

生物信息学是生命科学研究的重大前沿领域,未来将占据生命科学研究的半壁江山。已经有越来越多的小伙伴投入到生物信息的学习中,但是入门难、深入慢、摸不到方向等都成为持续学习的拦路虎。本文根据生物信息技术大牛...

elkb实践经验,再赠送一套复杂的配置文件
elkb实践经验,再赠送一套复杂的配置文件

原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。宝剑锋从磨砺出,梅花香自苦寒来。诗人白居易,三月下江南,看到沿路开放的桃花,心潮澎湃...

2024-05-20 14:43 gowuye

超详细从0到1 搭建ELK监控
超详细从0到1 搭建ELK监控

监控分类?Metrics用于记录可聚合的数据。例如,1、队列的当前深度可被定义为一个度量值,在元素入队或出队时被更新;HTTP请求个数可被定义为一个计数器,...

2024-05-20 14:42 gowuye

嵌入式开发 之Web配置页面开发
嵌入式开发 之Web配置页面开发

1.PHP是最好的语言??开发动态页面首选的语言是PHP,村村不能在这里忽悠人,如果你的硬件性能允许切略懂PHP,看到这里就可以退出了。本文面向的受众是Linu...

2024-05-20 14:42 gowuye

Python开发一个网站目录扫描工具用来检测网站是否有漏洞?
Python开发一个网站目录扫描工具用来检测网站是否有漏洞?

开发一个网站目录扫描工具是用来检测网站是否有非法目录请求的一个常见需求之一,我们要通过这个扫描工具来找到通过某个域名可以访问到的网站路径,可能对于有些系统来讲,...

2024-05-20 14:42 gowuye

创建一个类似Youtube的Id——使用PHP/Python/JS/Java/SQL

id通常都是用数字,不巧的是只有10个数字来使用,所以如果你有很多的记录,id往往变得非常冗长。当然对于计算机来说无所谓,但我们更希望id尽可能短。所以我们如何能使id变短?我们可以利用字母让它们附加...

快速云:有助于移动应用安全开发的五条妙计
快速云:有助于移动应用安全开发的五条妙计

许多企业不断地向其开发团队提供培训。但是某些漏洞,如早在十多年前就发现的SQL注入,如今仍广泛存在于各种应用中。因而,安全培训永不过时。在开发移动应用时,开发者...

2024-05-20 14:41 gowuye

洛杉矶国际电影节最佳动画短片奖影片《G’DAY》正式全网上映
洛杉矶国际电影节最佳动画短片奖影片《G’DAY》正式全网上映

7月2日,由M&CSaatchi创作,由深受好评的澳大利亚导演迈克尔·格雷西执导的动画短片《G’day》,正式在全网上映。该影片因其出色的创意赢得了洛...

2024-05-20 14:41 gowuye

取消回复欢迎 发表评论: