在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)——访问修饰符正确姿势相关推荐

  1. 关于Java中各种修饰符与访问修饰符的说明

    关于Java中各种修饰符与访问修饰符的说明 类: 访问修饰符  修饰符  class 类名称 extends 父类名称 implement 接口名称 (访问修饰符与修饰符的位置可以互换) 访问修饰符 ...

  2. 【转载】Java中各种修饰符与访问修饰符的说明

    转:http://handbook.blog.163.com/blog/static/837295522010889212296/ 类: 访问修饰符  修饰符  class 类名称 extends 父 ...

  3. 访问修饰符作用范围由大到小是_9个java基础小知识

    一.面向对象和面向过程的区别 1. 面向过程 : 面向过程性能比面向对象高.因为类调用时需要实例化,开销比较大,比较消耗资源,所以当性能是最重要的考虑因素时(例如单片机.嵌入式开发.Linux/Uni ...

  4. .NET 基础 一步步 一幕幕 [注释、命名规则、访问修饰符、数据类型、常量、变量]...

    注释.命名规则.访问修饰符.数据类型.常量.变量 话说一个不会写注释的程序猿的不是一个好吃货,我们本篇就从注释开始说起好了. 在C#中有三种注释: 第一种:单行注释  以//开头,后面的就是注释内容 ...

  5. Java笔记013-IDEA、包、访问修饰符、封装、继承、多态、Super、方法重写/覆盖(override)、java的动态绑定机制

    目录 面向对象编程(中级部分) IDE(集成开发环境)-IDEA IDEA介绍 IDE(集成开发环境)-Eclipse Eclipse介绍 IDEA的安装 IDEA的基本介绍和使用 创建一个java项 ...

  6. 【译文】 C#面向对象的基本概念 (Basic C# OOP Concept) 第一部分(类,对象,变量,方法,访问修饰符)...

    译文出处:http://www.codeproject.com/Articles/838365/Basic-Csharp-OOP-Concept 相关文档:http://files.cnblogs.c ...

  7. 深入浅出OOP(五): C#访问修饰符(Public/Private/Protected/Internal/Sealed/Constants)

    访问修饰符(或者叫访问控制符)是面向对象语言的特性之一,用于对类.类成员函数.类成员变量进行访问控制.同时,访问控制符也是语法保留关键字,用于封装组件. Public, Private, Protec ...

  8. 基本语法及基本概念概述(标识符、访问修饰符、变量、数组、枚举、注释、空行、继承、接口、(对象、类、方法、实例变量)、关键字表)

    文章目录 1.标识符 2.标识符命名规范 3.访问修饰符 4.变量 5.数组 6. 枚举 7.注释 8.空行 9.继承 10.接口 11.对象.类.方法.实例 12.关键字表 13.保留字(reser ...

  9. [转]java构造方法的访问修饰符

    http://my.oschina.net/u/1464678/blog/210359 1.       类(class) 可见性修饰符: public-在所有类中可见,在其他包中可以用import导 ...

最新文章

  1. Codeforces 861D - Polycarp's phone book 字典树/hash
  2. html 怎么自动让图片居中显示,css中怎样让图片居中显示?
  3. ERP云端争霸 甲骨文和SAP打对攻 金蝶忙转身用友原地等待
  4. mysql数据库入门教程(6):数据的增删改
  5. Redis Master/Slave 实践
  6. Java黑皮书课后题第4章:*4.8(给出ASCII码对应的字符)编写程序,得到一个ASCII码的输入(0~27之间的一个整数),然后显示该字符
  7. 文件路径中 / 和 ./ 和 ../的区别
  8. 解析Json的格式.
  9. k层交叉检验(k-flod cross-validation)
  10. 故宫网站遭“围攻”!
  11. java integer源码_Integer包装类源码分析
  12. Python 水仙花数
  13. PostGIS创建Gis空间数据库,shp数据入库
  14. 视频格式与编码压缩标准 mpeg4,H.264.H.265 有什么关系?
  15. Ctrl 键失效或者 Ctrl + D键失效,不灵
  16. canal - 数据同步工具
  17. 基于stm32的mpu6050传感器实验
  18. 【苹果CMS技术教程】苹果CMSV10伪静态基础认识和设置教程
  19. 青年论坛:谈判的情感力量
  20. Qt+Win10使用QAxWidget控件实现远程桌面控制

热门文章

  1. [USACO13JAN] Cow Lineup (单调队列,尺取法)
  2. python自动化测试-D6-学习笔记之一(常用模块补充datetime模块)
  3. jQuary的相关动画效果
  4. iOS 第三方登录之 QQ登录
  5. 游戏运营杂谈之-----IB推荐算法
  6. 文件下载至storage_如何防止Storage Sense在Windows 10上删除下载的文件
  7. 如何在Windows上使用64位Web浏览器
  8. piwik抓取用户交互行为
  9. Nodejs Guides(四)
  10. AM335x kernel4.4.12 LCD 时钟翻转设置记录