a是一个internal的类型,所以这个类型的字段aa不能作为public类的public字段,这会导致访问不到类型a的地方能访问到字段aa,而这个时候字段aa的类型是不可见的,这是不允许的。如果字段aa所在的类是internal的(即把class b前面的public去掉)或者这个字段aa本身是internal的,就没问题了。

解决方案 »

  1.   

    不写,默认是private的,这样就是说对外不公开这个类,但你的b是公开的,就是说外部可以用访问到b,但你的b类不能公开a类的对象,因为a类型是private的,如果公开。编译器就不知道你的a类到底要不要公开。你声明和调用,都统一成private,public,internal就没问题的了。
      

  2.   

    Q1:
      A:
        1.Class a 为internal的.
        2.Class b 为public.
        在public的类里不能将a 申明为public(因为本身a 就不可能为public),即你只能申明a为比它本身修饰符低的或者同级的.如private,internal.Q2:
      A:
        将Class b的public修饰符去掉,则b于a都属于同一级别了,可以互相访问.
         结合“hbxtlhx(平民百姓)”说的:
    在一个类里公开另一个类型的时候,另一个类型的修饰符级别要>=你这个类型的修饰符级别才行.
      

  3.   

    还不是特别明白, class a的类型怎么是Internal 默认不是Private
      

  4.   

    默认类型是internal,这个是C#的规则,而且类好像不能定义为private和protected。
    一个internal类如果在public类中产生public的实例,那么就代表这个类的对象的内容可以被外部项目访问,这与这个类的internal类型语义相冲突,所以无法编译。
    总结起来就是楼上几位所说的:
    在一个类里公开另一个类型的时候,另一个类型的修饰符级别要>=你这个类型的修饰符级别。
      

  5.   

    定义的访问级别要和调用时一致,或公用性小于定义,一般定义时都是internal 或public不然要报错,这个还需要问原因吗?
      

  6.   

    using System;
    interface ISampleInterface
    {
        void SampleMethod();
    }
    class ImplementationClass : ISampleInterface
    {
       
    public void SampleMethod()
        {
           System.Windows.Forms.MessageBox.Show("test2");
    }
    static void Main()
        {
            ImplementationClass t=new ImplementationClass();
    //ISampleInterface isi=(ISampleInterface)t;
    //t.ISampleInterface.SampleMethod();
    t.SampleMethod();
        }}
    但是我这样也没有申明啊,但是程序没什么问题,我想是不是显示调用的问题..
      

  7.   

    ls的
    你的t又没有修饰成public,怎么会有问题
      

  8.   

    class的默认访问修饰符是internal,class的内部成员默认访问修饰符才是private其他的hbxtlhx(平民百姓)已经讲得很清楚了