protected可以让任何该类的子类访问   
protected   internal只可以让同一个名字空间中的子类访问现在一个工程里面有2个命名空间
namespace ConsoleApplication1
{
     class ClassA
    {
       protected internal int c;
    }
}namespace ConsoleApplication2
{
    class Program:ClassA
    {
        void setc()
        {
            this.c = 1;
        }
    }
}编译没有错
应该是protected internal 修饰的变量只能被
相同命名空间的派生类访问啊
为什么不同空间的派生类也能访问呢?如果把该工程编译后生成的exe文件
添加到其他工程的引用中,
再构建一个classA的派生类
同样可以访问c
这是怎么回事protected internal 到底要怎么用啊?

解决方案 »

  1.   

    internal类型仅对定义该类型的程序集中的所有代码可见,而对其他程序集中的代码不可见
    ==================================================================================程序集不是命名空间哈
      

  2.   

    工程编译后生成的exe文件
    添加到其他工程pro1的引用中,
    pro1再构建一个classA的派生类
    同样可以访问c
    这是怎么回事
      

  3.   

    protected:          Access is limited to the containing class or types derived from the containing class. 
    protected internal: Access is limited to the current assembly or types derived from the containing class. 不过我试的结果和你一样,貌似只要派生了就有,跟assembly都没关系帮你顶下吧
      

  4.   

    知道原因了protected和interval二者修饰的权限是一个并集不是交集也就是说能被类的子类所访问并且(不管这个子类在哪个程序集里)
    并且能被同一个程序集的类所访问protected就只能被子类所访问(不管这个子类在哪个程序集里)
    如果在同一程序集里面,不是子类的话仅有protected所修饰的成员就不能被访问