.NET架构小技巧(2)——访问修饰符正确姿势
在C#中,訪問修飾符是使用頻率很高的一組關(guān)鍵字,一共四個(gè)單詞六個(gè)組合:public,internal,protected internal,protected,private protected,private,如果你對(duì)這些關(guān)鍵字非常清楚,請(qǐng)?zhí)^,節(jié)省時(shí)間;如果你在編程中一般都使用public和private,那不防花點(diǎn)時(shí)間來(lái)明確一下,方便設(shè)計(jì)功能模塊時(shí)準(zhǔn)備使用。
如果簡(jiǎn)單的分層.net程序集(dll,exe)的話,如上圖,修飾符用在自定義類型前和類內(nèi)部的成員前(方法,屬性,字段等),自定義類型只能使用internal和public,類內(nèi)部成員七種修飾符都可以使用的。
接下來(lái),嘮叨一下七種使用場(chǎng)景:
public:這個(gè)什么場(chǎng)景都可以使用
internal:只能在當(dāng)前的應(yīng)用程序集內(nèi)使用
protected:只能在子類中使用父類中的protected成員
private:只能在當(dāng)前類中使用private成員
protected internal:在當(dāng)前程序集內(nèi)使用和不在一個(gè)程序集內(nèi)的子類中使用
private protected:只能在當(dāng)前程序集內(nèi)的子類中使用
準(zhǔn)確的使用訪問修飾符,可以很好的封裝對(duì)象的功能,該對(duì)外暴露的暴露,該開放的開放,開放的多徹底都可以控制。
例如:
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方法只在內(nèi)部使用,所以是Private;Add方法是供外部添加元素的,public;Count屬性get是對(duì)外提供元素的個(gè)數(shù),但set是私有的,不能在外部對(duì)它賦值;字段array按理該是private,這里我想讓子類能訪問到,以便提供更大的訪問權(quán)限,官方的List<T>是private的,子類中是看不見這個(gè)數(shù)據(jù)的。這個(gè)例子就能很好的說明:準(zhǔn)確的使用訪問修飾符,可以很好的封裝對(duì)象的功能,該對(duì)外暴露的暴露,該開放的開放。
另一方面,規(guī)(節(jié))范(操)也很重要!
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的.NET架构小技巧(2)——访问修饰符正确姿势的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一站式Web开发套件BeetleX.We
- 下一篇: 简单聊聊AspNetCore的启动流程