.NET架构小技巧(2)——访问修饰符正确姿势
在C#中,访问修饰符是使用频率很高的一组关键字,一共四个单词六个组合:public,internal,protected internal,protected,private protected,private,如果你对这些关键字非常清楚,请跳过,节省时间;如果你在编程中一般都使用public和private,那不防花点时间来明确一下,方便设计功能模块时准备使用。
如果简单的分层.net程序集(dll,exe)的话,如上图,修饰符用在自定义类型前和类内部的成员前(方法,属性,字段等),自定义类型只能使用internal和public,类内部成员七种修饰符都可以使用的。
接下来,唠叨一下七种使用场景:
public:这个什么场景都可以使用
internal:只能在当前的应用程序集内使用
protected:只能在子类中使用父类中的protected成员
private:只能在当前类中使用private成员
protected internal:在当前程序集内使用和不在一个程序集内的子类中使用
private protected:只能在当前程序集内的子类中使用
准确的使用访问修饰符,可以很好的封装对象的功能,该对外暴露的暴露,该开放的开放,开放的多彻底都可以控制。
例如:
public class Program
{static void Main(string[] args)
{var myList = new MyList<int>();myList.Add(1);myList.Add(2);myList.Add(3);myList.Add(4);myList.Add(5);foreach (var o in myList){Console.WriteLine(o);}}
}public class MyList<T> : IEnumerable
{protected T[] array;public MyList()
{array = new T[4];}public int Count{get;private set;} = 0;public void Add(T t)
{if (array.Length == Count){array = CreateNewArray(array, Count * 2);}array[Count] = t;Count++;}public IEnumerator GetEnumerator()
{for (int i = 0; i < Count; i++){yield return array[i];}}private T[] CreateNewArray(T[] oldArray, int length){var newArray = new T[length];oldArray.CopyTo(newArray, 0);return newArray;}
}
其中,CreateNewArray方法只在内部使用,所以是Private;Add方法是供外部添加元素的,public;Count属性get是对外提供元素的个数,但set是私有的,不能在外部对它赋值;字段array按理该是private,这里我想让子类能访问到,以便提供更大的访问权限,官方的List<T>是private的,子类中是看不见这个数据的。这个例子就能很好的说明:准确的使用访问修饰符,可以很好的封装对象的功能,该对外暴露的暴露,该开放的开放。
另一方面,规(节)范(操)也很重要!
.NET架构小技巧(2)——访问修饰符正确姿势相关推荐
- 关于Java中各种修饰符与访问修饰符的说明
关于Java中各种修饰符与访问修饰符的说明 类: 访问修饰符 修饰符 class 类名称 extends 父类名称 implement 接口名称 (访问修饰符与修饰符的位置可以互换) 访问修饰符 ...
- 【转载】Java中各种修饰符与访问修饰符的说明
转:http://handbook.blog.163.com/blog/static/837295522010889212296/ 类: 访问修饰符 修饰符 class 类名称 extends 父 ...
- 访问修饰符作用范围由大到小是_9个java基础小知识
一.面向对象和面向过程的区别 1. 面向过程 : 面向过程性能比面向对象高.因为类调用时需要实例化,开销比较大,比较消耗资源,所以当性能是最重要的考虑因素时(例如单片机.嵌入式开发.Linux/Uni ...
- .NET 基础 一步步 一幕幕 [注释、命名规则、访问修饰符、数据类型、常量、变量]...
注释.命名规则.访问修饰符.数据类型.常量.变量 话说一个不会写注释的程序猿的不是一个好吃货,我们本篇就从注释开始说起好了. 在C#中有三种注释: 第一种:单行注释 以//开头,后面的就是注释内容 ...
- Java笔记013-IDEA、包、访问修饰符、封装、继承、多态、Super、方法重写/覆盖(override)、java的动态绑定机制
目录 面向对象编程(中级部分) IDE(集成开发环境)-IDEA IDEA介绍 IDE(集成开发环境)-Eclipse Eclipse介绍 IDEA的安装 IDEA的基本介绍和使用 创建一个java项 ...
- 【译文】 C#面向对象的基本概念 (Basic C# OOP Concept) 第一部分(类,对象,变量,方法,访问修饰符)...
译文出处:http://www.codeproject.com/Articles/838365/Basic-Csharp-OOP-Concept 相关文档:http://files.cnblogs.c ...
- 深入浅出OOP(五): C#访问修饰符(Public/Private/Protected/Internal/Sealed/Constants)
访问修饰符(或者叫访问控制符)是面向对象语言的特性之一,用于对类.类成员函数.类成员变量进行访问控制.同时,访问控制符也是语法保留关键字,用于封装组件. Public, Private, Protec ...
- 基本语法及基本概念概述(标识符、访问修饰符、变量、数组、枚举、注释、空行、继承、接口、(对象、类、方法、实例变量)、关键字表)
文章目录 1.标识符 2.标识符命名规范 3.访问修饰符 4.变量 5.数组 6. 枚举 7.注释 8.空行 9.继承 10.接口 11.对象.类.方法.实例 12.关键字表 13.保留字(reser ...
- [转]java构造方法的访问修饰符
http://my.oschina.net/u/1464678/blog/210359 1. 类(class) 可见性修饰符: public-在所有类中可见,在其他包中可以用import导 ...
最新文章
- Codeforces 861D - Polycarp's phone book 字典树/hash
- html 怎么自动让图片居中显示,css中怎样让图片居中显示?
- ERP云端争霸 甲骨文和SAP打对攻 金蝶忙转身用友原地等待
- mysql数据库入门教程(6):数据的增删改
- Redis Master/Slave 实践
- Java黑皮书课后题第4章:*4.8(给出ASCII码对应的字符)编写程序,得到一个ASCII码的输入(0~27之间的一个整数),然后显示该字符
- 文件路径中 / 和 ./ 和 ../的区别
- 解析Json的格式.
- k层交叉检验(k-flod cross-validation)
- 故宫网站遭“围攻”!
- java integer源码_Integer包装类源码分析
- Python 水仙花数
- PostGIS创建Gis空间数据库,shp数据入库
- 视频格式与编码压缩标准 mpeg4,H.264.H.265 有什么关系?
- Ctrl 键失效或者 Ctrl + D键失效,不灵
- canal - 数据同步工具
- 基于stm32的mpu6050传感器实验
- 【苹果CMS技术教程】苹果CMSV10伪静态基础认识和设置教程
- 青年论坛:谈判的情感力量
- Qt+Win10使用QAxWidget控件实现远程桌面控制
热门文章
- [USACO13JAN] Cow Lineup (单调队列,尺取法)
- python自动化测试-D6-学习笔记之一(常用模块补充datetime模块)
- jQuary的相关动画效果
- iOS 第三方登录之 QQ登录
- 游戏运营杂谈之-----IB推荐算法
- 文件下载至storage_如何防止Storage Sense在Windows 10上删除下载的文件
- 如何在Windows上使用64位Web浏览器
- piwik抓取用户交互行为
- Nodejs Guides(四)
- AM335x kernel4.4.12 LCD 时钟翻转设置记录