C# 封装

封装 被定义为"把一个或多个项目封闭在一个物理的或者逻辑的包中"。在面向对象程序设计方法论中,封装是为了防止对实现细节的访问。

抽象和封装是面向对象程序设计的相关特性。抽象允许相关信息可视化,封装则使开发者实现所需级别的抽象。

C# 封装根据具体的需要,设置使用者的访问权限,并通过 访问修饰符 来实现。

一个 访问修饰符 定义了一个类成员的范围和可见性。C# 支持的访问修饰符如下所示:

public:所有对象都可以访问;

private:对象本身在对象内部可以访问;

protected:只有该类对象及其子类对象可以访问

internal:同一个程序集的对象可以访问;

protected internal:访问限于当前程序集或派生自包含类的类型。

Public 访问修饰符

Public 访问修饰符允许一个类将其成员变量和成员函数暴露给其他的函数和对象。任何公有成员可以被外部的类访问。

下面的实例说明了这点:

实例


using System;namespace RectangleApplication
{class Rectangle{//成员变量public double length;public double width;public double GetArea(){return length * width;}public void Display(){Console.WriteLine("长度: {0}", length);Console.WriteLine("宽度: {0}", width);Console.WriteLine("面积: {0}", GetArea());}}// Rectangle 结束class ExecuteRectangle{static void Main(string[] args){Rectangle r = new Rectangle();r.length = 4.5;r.width = 3.5;r.Display();Console.ReadLine();}}
}

当上面的代码被编译和执行时,它会产生下列结果:

长度:4.5
宽度:3.5
面积:15.75

在上面的实例中,成员变量 length 和 width 被声明为 public,所以它们可以被函数 Main() 使用 Rectangle 类的实例 r 访问。

成员函数 Display() 和 GetArea() 可以直接访问这些变量。

成员函数 Display() 也被声明为 public,所以它也能被 Main() 使用 Rectangle 类的实例 r 访问。

Private 访问修饰符

Private 访问修饰符允许一个类将其成员变量和成员函数对其他的函数和对象进行隐藏。只有同一个类中的函数可以访问它的私有成员。即使是类的实例也不能访问它的私有成员。

下面的实例说明了这点:

实例


using System;namespace RectangleApplication
{class Rectangle{//成员变量private double length;private double width;public void Acceptdetails(){Console.WriteLine("请输入长度:");length = Convert.ToDouble(Console.ReadLine());Console.WriteLine("请输入宽度:");width = Convert.ToDouble(Console.ReadLine());}public double GetArea(){return length * width;}public void Display(){Console.WriteLine("长度: {0}", length);Console.WriteLine("宽度: {0}", width);Console.WriteLine("面积: {0}", GetArea());}}//end class Rectangle    class ExecuteRectangle{static void Main(string[] args){Rectangle r = new Rectangle();r.Acceptdetails();r.Display();Console.ReadLine();}}
}

当上面的代码被编译和执行时,它会产生下列结果:

请输入长度:

4.4

请输入宽度:

3.3

长度:4.4

宽度:3.3

面积:14.52

在上面的实例中,成员变量 length 和 width 被声明为 private,所以它们不能被函数 Main() 访问。

成员函数 AcceptDetails() 和 Display() 可以访问这些变量。

由于成员函数 AcceptDetails() 和 Display() 被声明为 public,所以它们可以被 Main() 使用 Rectangle 类的实例 r 访问。

Protected 访问修饰符

Protected 访问修饰符允许子类访问它的基类的成员变量和成员函数。这样有助于实现继承。我们将在继承的章节详细讨论这个。更详细地讨论这个。

Internal 访问修饰符

Internal 访问说明符允许一个类将其成员变量和成员函数暴露给当前程序中的其他函数和对象。换句话说,带有 internal 访问修饰符的任何成员可以被定义在该成员所定义的应用程序内的任何类或方法访问。

下面的实例说明了这点:

实例


using System;namespace RectangleApplication
{class Rectangle{//成员变量internal double length;internal double width;double GetArea(){return length * width;}public void Display(){Console.WriteLine("长度: {0}", length);Console.WriteLine("宽度: {0}", width);Console.WriteLine("面积: {0}", GetArea());}}//end class Rectangle    class ExecuteRectangle{static void Main(string[] args){Rectangle r = new Rectangle();r.length = 4.5;r.width = 3.5;r.Display();Console.ReadLine();}}
}

当上面的代码被编译和执行时,它会产生下列结果:

长度:4.5

宽度:3.5

面积:15.75

在上面的实例中,请注意成员函数 GetArea() 声明的时候不带有任何访问修饰符。如果没有指定访问修饰符,则使用类成员的默认访问修饰符,即为 private。

Protected Internal 访问修饰符

Protected Internal 访问修饰符允许在本类,派生类或者包含该类的程序集中访问。这也被用于实现继承。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言中比较大小的函数模板,C语言中实现模板函数小结 : 不敢流泪

—-by boluor 2009/5/20如果要写个函数支持多种数据类型,首先想到的就是C的模板了,但是有时候只能用C语言,比如在linux内核开发中,为了减少代码量,或者是某面试官的要求…考虑了一阵子后,就想到了qsort上.q…

lamp架构优化

LAMP(LinuxApacheMysqlPerl/PHP/Python)常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。每个LA…

毕业的那天,程序员师兄竟然让我去做这一行

给大家看一份最新的数据:(薪资表)2018年最新数据:python、大数据、人工智能从业者工资为什么人工智能行业的工资那么高?无论是科研院所,商业巨头还是初创企业,各行各业都在大力开发或者引进人工…

C# FileSystemWatcher文件监控实例

FileSystemWatcher可以使用FileSystemWatcher组件监视文件系统,并对文件系统的改变作出反应。通过使用FileSystemWatcher组件,在特定的文件或目录被创建、修改或删除时,可以快速和便捷地启动业务流程。例如,如果一组用户在合作处理…

c语言中二重指针如何赋值,关于二重指针释放的有关问题

关于二重指针释放的问题使用 malloc 来申请内存,申请的代码部分如下:float *fp (float*)malloc(sizeof(float)* h * w);float **cost (float**)malloc(sizeof(float*)* h);for (int i 0; i cost[i] &fp[i * w];}那我释放的时候应该如何释放呢&am…

第一个Win32 SDK应用程序

#include<windows.h>int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int);LRESULT WINAPI WndProc(HWND,UINT,WPARAM,LPARAM);// WinMain 函数int WINAPI WinMain (HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){HWND hWnd; // 主窗口句柄…

Python 分析《爱情公寓》电影,让我十年情怀一瞬间都喂了狗

深陷抄袭之名、诉讼纠纷的《爱情公寓》终于上映了。情怀粉们的力量不容小觑&#xff0c;截止到8月12&#xff0c;《爱情公寓》票房已经突破3.72亿大关&#xff0c;稳坐票房冠军的宝座&#xff0c;院线排片占比高达40.0%。和超高票房背道而驰的&#xff0c;是各大社交平台上一边…

银行背景下分库分表技术选型

业务持续增长带来的单表数据量过大&#xff0c;必然影响到数据库的读写性能&#xff0c;那到底要不要分库分表呢&#xff1f;阿里巴巴P3C规范给出一个推荐&#xff1a;【推荐】单表行数超过500万行或者单表容量超过2GB&#xff0c;才推荐进行分库分表。说明&#xff1a;如果预计…

单片机矩阵消抖延时c语言,单片机矩阵按键定时器消抖程序源码

芯片是采用的stc89c51单片机.下面是矩阵键盘的电路图&#xff0c;矩阵键盘是接在p2口的.下面是单片机部分的图,数码管显示等完整的原理图可以从http://www.51hei.com/f/ks51.pdf 这里下载本文引用地址&#xff1a;http://www.eepw.com.cn/article/201612/324612.htm下面是程序源…

资料分享 | R语言资料分享来袭

小编从大学开始&#xff0c;便开启资料收集功能。R作为一种统计分析软件&#xff0c;广泛应用于生物、医学、电商、新闻等数据相关行业&#xff0c;并已成为主流数据应用软件之一&#xff0c;经过近几年的积累和沉淀&#xff0c;再加上日常的深入研究&#xff0c;小编收集整理了…

google code for xbmc addons2

2019独角兽企业重金招聘Python工程师标准>>> http://code.google.com/p/xbmc-skin-convergence/downloads/list 转载于:https://my.oschina.net/u/174445/blog/33955

ASP.NET Core中使用令牌桶限流

在限流时一般会限制每秒或每分钟的请求数&#xff0c;简单点一般会采用计数器算法&#xff0c;这种算法实现相对简单&#xff0c;也很高效&#xff0c;但是无法应对瞬时的突发流量。比如限流每秒100次请求&#xff0c;绝大多数的时间里都不会超过这个数&#xff0c;但是偶尔某一…

c语言怎样表示运行时间,C语言运行时间

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include#include#define C 90000000void main(){long int i;printf(" OOOOOOO ****** ****** OOO OOO \n");for(i0;i<C;i);printf(" OOOOOOO …

10.26

1. 去掉工程中添加的新类 2. DirectUI 3. MFC 文件操作 4. http://www.cnblogs.com/jiaxiaoai/archive/2011/07/04/2097188.html 5. ATL,COM 6. 全局变量转载于:https://www.cnblogs.com/shiney/archive/2011/10/26/2224799.html

我们需要什么样的开源教育?

点击上方“开源社”关注我们| 作者&#xff1a;庄表伟| 编辑&#xff1a;沈于蓝| 设计&#xff1a;宋传琪‍文章缘起‍写这篇文章的原因&#xff0c;是和几个朋友的闲聊。再之前&#xff0c;是因为看到了几篇文章2020-12-18 《欢迎加入&#xff01;开放原子大学首批开源讲师认证…

谷歌十年,我的认知被彻底颠覆

这个问题是提给自己的&#xff0c;算是对我 Google 十年的一个小结。强调“不装逼”&#xff0c;主要是提醒自己不要陷入下列俗套&#xff1a;离职后靠黑前雇主、八卦前雇主、揭秘前雇主搏出位&#xff08;这条是恶行&#xff09;满足大众猎奇心理吹嘘自己&#xff0c;贬低他人…

重言式判别c语言中文网,重言式判别 重言式判别源码及课程设计 c语言版.doc

重言式判别 重言式判别源码及课程设计 c语言版重言式的判别 题目&#xff1a;一个逻辑表达式如果对于其変元的任一种取值都为真&#xff0c;则称为重言式&#xff1b;反之&#xff0c;如果对于其变元的任一种取值都为假&#xff0c;则称为矛盾式&#xff1b;然而&#xff0c;更…

redis灵魂拷问:19图+11题带你面试通关

又到了金三银四跳槽季&#xff0c;好多同学已经开始行动了。今天我来助力一把&#xff0c;送出这套redis面试题&#xff0c;助力大家通关。1 redis为什么响应快1.1数据保存在内存中redis数据保存在内存中&#xff0c;读写操作只要访问内存&#xff0c;不需要磁盘IO。1.2.底层数…

趣图:BAT程序员的一天对比

这是一张流传网络的BAT的一天对比图&#xff1a;你看懂了吗&#xff1f;数据与算法之美用数据解决不可能长按扫码关注

android view存储为jpg,Android长按imageview把图片保存到本地的实例代码

工具类之前用AsyncTask现在改用rxJavapublic class SaveImageUtils {public static void imageSave(final ImageView imageView, final int id) {Observable.create(new Observable.OnSubscribe() {Overridepublic void call(Subscriber super ImageView> sub) {sub.onNext(…