zoukankan      html  css  js  c++  java
  • 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月瞬息间又过了差不多半个月,时间的在心头的感觉默默然,活在当下,不期盼改变世界,至少先改变自己!一步一脚印,做出来!

    一个自己维护的微信公众号,目前文章不多,希望接下来的日子,会一直更新下去,写自己的生活,分享技术,希望热爱生活的技术宅,一起交流!

     

  • 相关阅读:
    SpringMVC Controller介绍及常用注解
    spring Handler 映射
    如何更高效的对首页数据的展示
    设计表时给哪些字段加索引,索引的用处,以及能不能给所有字段加索引
    spring mybatis解决application.properties注入变量问题
    Spring配置中的id和name属性区分
    @RequestBody和@RequestParam区别
    SpringMVC中controller中方法返回类型为ResponseEntity乱码的问题
    扩展springMVC消息转换器来支持jsonp数据格式
    SpringMVC——消息转换器HttpMessageConverter
  • 原文地址:https://www.cnblogs.com/liupeng61624/p/5122192.html
Copyright © 2011-2022 走看看