对访问修饰关键字public, protected, internal and private的说明
1.
msdn: Internal types or members are accessible only within files in the same assembly.
只要在同一个assembly中就能访问,而不是命名空间。
如下面的例子,在同一个assembly ClassLibrary2.dll中:
namespace ClassLibrary2
{
    public class Class1
    {
        protected string TestString1 { get; set; }
        internal string TestString2 { get; set; }
        protected internal string TestString3 { get; set; }
    }
}

// 在子命名空间中访问
namespace ClassLibrary2.SubNamespace
{
    public class Class2
    {
        public Class2()
        {
            Class1 c1 = new Class1();
            //c1.TestString1 = "1"; // 'ClassLibrary2.Class1.TestString1' is inaccessible due to its protection level
            c1.TestString2 = "2";
            c1.TestString3 = "3";
        }
    }
}

// 在另一个命名空间中访问
namespace AnotherNamespace
{
    public class Class3
    {
        public Class3()
        {
            ClassLibrary2.Class1 c1 = new ClassLibrary2.Class1();
            //c1.TestString1 = "1"; // 'ClassLibrary2.Class1.TestString1' is inaccessible due to its protection level
            c1.TestString2 = "2";
            c1.TestString3 = "3";
        }
    }
}

2. 
protected表示只能在定义它的类的内部或者它的子类内部访问。
被protected internal两个关键字同时修饰的表示能被子类访问(子类可以在另一个assembly中)或者在同一个assembly中访问。
注意它们上并集,不是交集。
例如有另外一个assembly, ClassLibrary3.dll:
namespace ClassLibrary3
{
    public class A : ClassLibrary2.Class1
    {
        public A()
        {
            this.TestString1 = "1";
            //this.TestString2 = "2";  // cannot see it.
            this.TestString3 = "3";
        }
    }
}

3.
Top-level types, which are not nested in other types, can only have internal or public accessibility. The default accessibility for these

types is internal. 
如果尝试用private,protected, or protected internal修饰一个Top-level class,例如:
private class A
{
}
会报一个错:Error,Elements defined in a namespace cannot be explicitly declared as private, protected, or protected internal

但是可以修饰nested class, 如下,是不报错的。B缺省为internal。
class B
{
     private class B1 { }
     protected class B2 { }
     protected internal class B3 { }
}
nested type的缺省修饰如下:
Members of         Default member accessibility          Allowed declared accessibility of the member

enum                 public                                None
class                    private                              public, protected, internal, protected internal, pirvate
interface            public                                None

对访问修饰关键字public, protected, internal and private的说明的更多相关文章

  1. php类点滴---访问修饰符public protected private

    public可以被继承,可以外部访问(也就是实例化对象可以直接访问) protected受保护的,可以被子类继承,无法外部访问 private继承,外部访问都别想 <?phpclass coac ...

  2. 深入浅出OOP(五): C#访问修饰符(Public/Private/Protected/Internal/Sealed/Constants)

    访问修饰符(或者叫访问控制符)是面向对象语言的特性之一,用于对类.类成员函数.类成员变量进行访问控制.同时,访问控制符也是语法保留关键字,用于封装组件. Public, Private, Protec ...

  3. JAVA类型修饰符(public,protected,private,friendly)

    JAVA类型修饰符(public,protected,private,friendly) public的类.类属变量及方法.包内及包外的不论什么类均能够訪问:protected的类.类属变量及方法,包 ...

  4. Java中访问修饰符public、private、protecte、default

    Java中访问修饰符public.private.protecte.default的意义讲解:public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”.被其修饰的类.属性以及方法不 仅 ...

  5. 详细的解说public,protected,Default和private的权限问题

    详细的解说public,protected,Default和private的权限问题 让人更好的了解public,protected,Default和private他们之间的权限问题,我会做一个直观的 ...

  6. 访问修饰符(public,private,protected,internal,sealed,abstract)

    为了控件C#中的对象的访问权限,定义对象时可以在前面添加修饰符. 修饰符有五种:private(私有的),protected(受保护的),internal(程序集内部的),public(公开的),以及 ...

  7. C#访问修饰符(public,private,protected,internal,sealed,abstract)

    为了控件C#中的对象的访问权限,定义对象时可以在前面添加修饰符. 修饰符有五种:private(私有的),protected(受保护的),internal(程序集内部的),public(公开的),以及 ...

  8. Java访问权限修饰符public protected friendly private用法总结(转载好文Mark)

    首先声明:Java中,friendly这个修饰符并没有显式的声明,在成员变量和方法前什么修饰符也不用,默认的就是friendly.为了条理清晰,分三种不同情况来总结. 一 访问权限修饰符修饰成员变量和 ...

  9. java中访问修饰符public,private,protected,friendly的作用域

    在修饰的元素上没有写任何的访问修饰符,则表示friendly. 作用域 当前类 同一包中 子孙类 其他包中 public √ √ √ √ protected √ √ √ × private √ x x ...

随机推荐

  1. Underscore学习笔记1

    项目用了很久underscore.每次都是临时查手册,没有系统的研究过,最近有空正好看看 github地址:https://github.com/lily1010/underscore_learn 一 ...

  2. jQuery源码分析-02正则表达式-RegExp-常用正则表达式

    2.4 常用正则表达式在网上找到一篇广为流传的文章<常用正则表达式>,逐一分析,不足地方进行补充和纠正. 常用的数字正则(严格匹配) 正则 含义 ^[1-9]\d*$ 匹配正整数 ^-[1 ...

  3. 2015年第5本(英文第4本):Death on the Nile尼罗河上的惨案

    书名:Death on the Nile 作者: Agatha Christie 单词数:7.9万(读完后发现网上还有一个版本,总共2.7万单词,孩子都能读懂,看来是简写版) 词汇量:6700 首万词 ...

  4. Android 程序目录及UI的简介

    Android程序的目录结构 src:源码的组织管理目录. gen:自动生成的目录,会生成一些重要的文件,如R.java,该目录一般不需要我们编写. assets:该目录文件不会被编译成二进制编码,多 ...

  5. 安卓第四天笔记-Sqlite

    安卓第四天笔记-Sqlite 1.数据库的创建运行与更新 1.1.创建一个类继承SqliteOpenHelper 1.2.创建构造方法 /** * 数据库创建类 * @author 刘楠 * * 20 ...

  6. Spring(五)AOP简述

    一.AOP简述 AOP全称是:aspect-oriented programming,它是面向切面编号的思想核心, AOP和OOP既面向对象的编程语言,不相冲突,它们是两个相辅相成的设计模式型 AOP ...

  7. 系统在某些情况下会自动调节UIScrollView的contentInset

    出现情景 如果一个控制器(ViewController)被导航控制器管理,并且该控制器的第一个子控件是UIScrollView,系统默认会调节UIScrollView的contentInset UIE ...

  8. windows 注册表编程

    例子:将本地计算机的Monitor ID写入到注册表中 (1)获取MonitorID BOOLEAN DeviceMonitorService::EnumClassDevice(const GUID ...

  9. OOD沉思录 --- 类和对象的关系 --- 包含关系3

    4.7 类包含的对象数目不应当超过开发者短期记忆数量,这个数目通常应该是6左右 4.8 让系统在窄而深的包含体系中垂直分布 假设有如下两份菜单: 正餐 --->甜瓜 --->牛排 ---& ...

  10. (ios实战)单个ViewControl适配不同ios版本xib文件实现

    xcode5 中的界面布局 根据sdk 分成ios7.0 and Later 和 ios6.1 and Earlier 两种,那如何xib同时支持 ios6 和ios7 的界面呢 方法如下: 在xco ...