ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

.NET架构小技巧(2)——访问修饰符正确姿势

2022-01-29 11:31:10  阅读:157  来源: 互联网

标签:架构 修饰符 private public Add protected myList array NET


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

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

  想要更快更方便的了解相关知识,可以关注微信公众号   

 

 

标签:架构,修饰符,private,public,Add,protected,myList,array,NET
来源: https://www.cnblogs.com/ljknlb/p/15854613.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有