C#基礎回顧(一)—C#訪問修飾符


一.寫在前面的話

好久沒有停下來總結自己,轉眼間15年過去好些天,回首過去的日子,亦或失去,亦或所得!生活的節奏,常常讓我們帶着急急忙忙的節奏去追趕,也許這並不是每個人所期望的生活方式!於他人,於自己,都是平凡生活中的小人物,不奢求榮華富貴,不祈求飛黃騰達,但求得心安理得,平安無恙,擁有屬於自己的那一份小幸福足以!從本篇開始,慢慢悉基礎,不急不躁,一步步總結,沉淀自己。也希望和各位高手們學習,願意虛心接受你們的建議。

二.前言

C#中為了數據的安全性以及代碼的拓展,定了幾種訪問級別,根據對應的訪問修飾符,可以獲取Class里面對應的字段、屬性、方法等。

常見的訪問修飾符有:
(1)public 公有訪問。不受任何限制。
(2)private 私有訪問。只限於本類成員訪問,子類。
(3)protected 保護訪問。只限於本類和子類訪問。
(4)internal 內部訪問。只限於本項目內訪問,其他不能訪問。
(5)protected internal 內部保護訪問。只限於本項目或是子類訪問,其他不能訪問

根據MSDN上面的解釋,我們也可以理解對應修飾符的作用。https://msdn.microsoft.com/zh-cn/library/wxh6fsc7.aspx

三.常見成員類型的訪問修飾符

(1)接口(interface)

接口成員訪問修飾符默認為public,且不能顯示使用訪問修飾符。


(2)類(class)
構造函數默認為public訪問修飾符。
析構函數不能顯示使用訪問修飾符且默認為private訪問修飾符。
類的成員默認訪問修飾符為private;

(3)枚舉(enum)
枚舉類型成員默認為public訪問修飾符,且不能顯示使用修飾符。

(4)結構(struct)
結構成員默認為private修飾符。
結構成員無法聲明為protected成員,因為結構不支持繼承。

(5)嵌套類型
嵌套類型的默認訪問修飾符為private。 和類,結構的成員默認訪問類型一致。

四.訪問修飾符測試

(1) 定義程序集AccessModifiersOne,添加DoData.cs類,分別在類中定義相關修飾符的方法。

可以看到在DoData.cs中,通過方法GetNeedData均可以訪問對應的方法,GetPublicData、GetPrivateData、
GetInternalData、GetProtectedData、GetProtectedInternalData。在自身Class中訪問方法不受限制。

/******************************************************************************** ** auth: liupeng ** date: 2016/1/11 星期一 16:14:25 ** desc: 訪問修飾符 ** Ver.: V1.0.0 *********************************************************************************/

namespace AccessModifiersOne { public class DoData { /// <summary>
        /// 公共方法 /// </summary>
        /// <returns></returns>
        public string GetPublicData() { return "My Name Is Public Data"; } /// <summary>
        /// 私有方法 /// </summary>
        /// <returns></returns>
        private string GetPrivateData() { return "My Name Is Private Data"; } /// <summary>
        /// 受保護方法 /// </summary>
        /// <returns></returns>
        protected string GetProtectedData() { return "My Name Is Protected Date"; } /// <summary>
        /// 程序集級別方法 /// </summary>
        /// <returns></returns>
        internal string GetInternalData() { return "My Name Is Internal Data"; } /// <summary>
        /// 受保護程序集級別方法 /// </summary>
        /// <returns></returns>
        protected internal string GetProtectedInternalData() { return "My Name Is Prtected Internal Data"; } /// <summary>
        /// 取數據 /// </summary>
        public void GetNeedData() { this.GetPublicData(); this.GetPrivateData(); this.GetInternalData(); this.GetProtectedData(); this.GetProtectedInternalData(); } } }

(2)在AccessModifiersOne程序集中添加DoDataTwo.cs,實例化一個DoData對象,可以看到對象只能訪問到GetPublicData
、GetInternalData、GetProtectedInternalData方法,其中GetPrivateData、GetProtectedData方法不能訪問到,證實了private不對外訪問。

/******************************************************************************** ** auth: liupeng ** date: 2016/1/11 星期一 16:28:15 ** desc: 尚未編寫描述 ** Ver.: V1.0.0 *********************************************************************************/
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace AccessModifiersOne { class DoDataTwo { public void GetNeedData() { var needDataObj = new DoData(); needDataObj.GetPublicData(); needDataObj.GetInternalData(); needDataObj.GetProtectedInternalData(); } } }

(3)在AccessModifiersOne程序集中添加DoDataThree.cs,同時繼承DoData.cs,實例化一個DoDataThree對象,可以看到該對象可以訪問GetPublicData、
GetProtectedData、GetInternalData、GetProtectedInternalData方法,證實了protected在自身類和繼承類中可以訪問。

/******************************************************************************** ** auth: liupeng ** date: 2016/1/11 星期一 16:33:08 ** desc: 尚未編寫描述 ** Ver.: V1.0.0 *********************************************************************************/
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace AccessModifiersOne { public class DoDataThree : DoData { public void GetNeedAnotherData() { var needDataObj = new DoDataThree(); needDataObj.GetPublicData(); needDataObj.GetInternalData(); needDataObj.GetProtectedInternalData(); //訪問父類的protect方法
            base.GetProtectedData(); } } }

(4)新建程序集AccessModifiersTwo,同時添加對AccessModifiersOne程序集的引用,添加GetData.cs,實例化一個DoData對象,通過實例化對象,可以看到
只能調用GetPublicData,證實了public訪問無限制。

/******************************************************************************** ** auth: liupeng ** date: 2016/1/11 星期一 16:37:35 ** desc: 尚未編寫描述 ** Ver.: V1.0.0 *********************************************************************************/
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using AccessModifiersOne; namespace AccessModifiersTwo { public class GetData { public void GetNeedData() { var needDataObj = new DoData(); needDataObj.GetPublicData(); } } }

 

五.結束語

2016年1月瞬息間又過了差不多半個月,時間的在心頭的感覺默默然,活在當下,不期盼改變世界,至少先改變自己!一步一腳印,做出來!

一個自己維護的微信公眾號,目前文章不多,希望接下來的日子,會一直更新下去,寫自己的生活,分享技術,希望熱愛生活的技術宅,一起交流!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM