博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.NET架构小技巧(2)——访问修饰符正确姿势
阅读量:4034 次
发布时间:2019-05-24

本文共 1763 字,大约阅读时间需要 5 分钟。

在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
(); 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
: 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的,子类中是看不见这个数据的。这个例子就能很好的说明:准确的使用访问修饰符,可以很好的封装对象的功能,该对外暴露的暴露,该开放的开放。

另一方面,规(节)范(操)也很重要!

转载地址:http://jskdi.baihongyu.com/

你可能感兴趣的文章
移植QT
查看>>
如此调用
查看>>
计算机的发展史
查看>>
带WiringPi库的交叉编译如何处理一
查看>>
带WiringPi库的交叉笔译如何处理二之软链接概念
查看>>
Spring事务的七种传播行为
查看>>
ES写入找不到主节点问题排查
查看>>
Java8 HashMap集合解析
查看>>
ArrayList集合解析
查看>>
欢迎使用CSDN-markdown编辑器
查看>>
Android计算器实现源码分析
查看>>
Android系统构架
查看>>
Android 跨应用程序访问窗口知识点总结
查看>>
各种排序算法的分析及java实现
查看>>
SSH框架总结(框架分析+环境搭建+实例源码下载)
查看>>
js弹窗插件
查看>>
自定义 select 下拉框 多选插件
查看>>
js判断数组内是否有重复值
查看>>
js获取url链接携带的参数值
查看>>
gdb 调试core dump
查看>>