当前位置:首页 > C#学习 > 正文内容

访问修饰符 private、public、protected、internal 、protected internal

小道6年前 (2018-09-19)C#学习4333

访问修饰符是成员声明的可选部分,指明程序的其他部分如何访问成员。

5种成员访问控制如下:

私有的(private);

公有的(public);

受保护的(protected);

内部的(internal);

受保护内部的(protected internal);


私有成员只能从声明它的类的内部访问,其他类不能看见或访问它们。

私有访问是默认的访问级别,所以,如果一个成员在声明时不带访问修饰符,那么它就是私有成员。


公有成员可以被程序中的其他对象访问,必须使用public访问修饰符指定公有访问。

    class Person
    {
        int age;//隐式声明私有字段 (默认)
        private string name;//显式声明私有字段
        //只能在Person这个类内部使用私有字段,外部无法看到和访问。

        public string nickname;//公有字段。
        //公有成员可以被程序中的其他对象访问。
    }


MSDN关于访问修饰符的访问级别解释:

访问修饰符是一些关键字,用于指定声明的成员或类型的可访问性。本节介绍四个访问修饰符:

  • public

  • protected

  • internal

  • private

使用这些访问修饰符可指定下列五个可访问性级别:

public:访问不受限制。

protected:访问仅限于包含类或从包含类派生的类型。

Internal:访问仅限于当前程序集。

protected internal:访问限制到当前程序集或从包含派生的类型的类别。

private:访问仅限于包含类型。

注意:对字段和方法而言 默认是 private 私有的 但是对类而言 默认是 internal 程序集。

认知误区

  internal,英文含义是“内部的”,这时候基础不扎实的同学,可能就混淆了这个“内部的”的确切含义,到底是指“同一命名空间”的内部,还是“同一程序集”的内部,本人就是突然被问到这个问题的时候,真的就犹豫了,而且曾经一度以为就是“同一命名空间”的内部(话外:我们太多时候都自以为了,其实只要自己稍微MSDN查一下,就很清楚了)。

  第一部分已经摘抄了微软MSDN官方的解释,其实这个内部就是“同一程序集”的内部,也就是说,internal修饰的方法或者属性,只要是在同一个程序集的中的其他类都可以访问,如果二者不在同一命名空间,只要使用using引用上相应的命名空间即可,这里,从另外一个方面也间接看出命名空间并不是界定访问级别的,而是保证全局的类唯一性的,下面就从现实生活中解释下internal的实际作用。


释疑

  都说艺术源于生活,编程也是一门艺术,所以一样也是可以成生活中找到相应的场景,下面我们以实际生活场景来描述internal修饰符的作用。

  某公司的某技术中心,发文规定即日起,中心内的“打印机”仅限本中心的各个部门使用,其他中心的人员不能使用。这个现实生活的场景中,技术中心其实就是个程序集,而每个部门相当于不同的类,当然部门可以有相应的标签,相当于不同的命名空间,其实就是进行逻辑划分,职责不同的部门属于不同的命名空间就可以理解了。而我们的“主角”打印机的旁边就会被贴上公告“本中心的打印机只能本中心使用。。。。”,此时就相当于给打印机打上了internal修饰符了。其他中心的同学们,再也用不上本中心的打印机了。


以上内容节选自《博客园》作者:小伟06


扫描二维码推送至手机访问。

版权声明:本文由小道发布,如需转载请注明出处。

本文链接:https://daobk.com/post/103.html

分享给朋友:

“访问修饰符 private、public、protected、internal 、protected internal” 的相关文章

字符串的处理

字符串的处理

C#中单个字符用单引号包含就是char类型,('a'),单引号中放且只能放一个字符。单个字符也可以表示为字符串,还可以有长度为0的字符串使用s.Length属性来获得字符串中的字符个数string可以看做是char的只读数组。char c = s[1];。C#中字符串有一个重要的特性...

字符串函数详解

字符串函数详解

字符串替换:string Replace(string oldValue, string newValue)将字符串中的出现oldValue的地方替换为newValue。例子:名字替换。取子字符串:string Substring(int startIndex),取从位置startIndex开始一直...

机器人:具有模糊判断

机器人:具有模糊判断

自己动手写聊天机器人,能够回答不同城市的天气、回答感情问题、问的次数过多还会饿死,提问可以模糊提问(包含指定关键词)。问“天气:北京”就回复“今天北京天气很好。”。        static void&nbs...

定义类:一个类可有有多个实例。

定义类:一个类可有有多个实例。

一个类可有有多个实例。类就是把一系列相关的变量(状态)、行为定义为一个整体。字段记录的就是这个对象相关的数据。    class Program     {     ...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。