C#中编译器不允派生类的可访问性比基类高。比如:内部类可以继承一个公共类,但反过来就不行。这是出于什么考虑,请高手回答下?

解决方案 »

  1.   

    继承的机制问题, 子类构造时会先执行基类的构造函数, 
    例如:子类是public , 基类是internal ,
    那么子类可被另一程序集调用,
    但在创建实例就出问题了,
    因为基类的访问权限只是internal ,
    无法执行基类的构造函数。仔细看看oo的机制就明白了
      

  2.   

    一楼解释得很清楚了,子类是public , 基类是internal,子类可被另一程序集调用, 但在创建实例就出问题了。这是很有可能发生的。
      

  3.   

    会发生什么问题是由于我提的那个问题决定的,也就是“C#中编译器不允派生类的可访问性比基类高”。我的问题是为什么要这么设置这样一个语法。是出于怎样的考虑,为了实现怎样的特性?没有会怎么样?(另外:”子类是public , 基类是internal,子类可被另一程序集调用,但在创建实例就出问题了“。基类的构造函数不是子类调用的吗,这样不是可以吗?我有的晕了~~)
      

  4.   

    using System;
    public class a {
    public a() {
    Console.WriteLine("This's a");
    }
    }
    public class b : a {
    public b() {
    Console.WriteLine("This's b");
    }
    }
    public class Test {
    static void Main() {
    b bb = new b();
    }
    }
    /* 
      结果
      This's a
      This's b
      
      因为:
    public 访问不受限制
    protected 访问只限于此程序或类中包含的类型
    internal 访问只限于此程序
    protected internal 访问只限于此程序或类中包含的类型
    private 访问只限于所包含的类型
     */