黑马程序员技术交流社区

标题: 访问级别约束 [打印本页]

作者: 郝滨    时间: 2013-3-7 19:59
标题: 访问级别约束
第一种情况,子类的可访问级别比父类的高
class Person
{
}
public class Student : Person
{
}
/第二种情况,类的访问修饰符和类方法的访问修饰符都高于【参数】的访问修饰符
class Person
{
}
public class Test
{
    public void Show(Person p)
   {
      Console.WriteLine(p.ToString());
  }
}
第三种情况,类的访问修饰符和类属性或字段的访问修饰符都高于【参数】的访问修饰符   class Person
{
}
public class Test
{
   public Person p;
    public void Show()
    {
        Console.WriteLine(p.ToString());
    }
}
/第四种情况,类的访问修饰符和类方法的访问修饰符都高于【参数】的访问修饰符
class Person
{
}
public class Test
{
    public Person Show()
    {
        return null;
    }
}=================================================================
访问级别约束:子类访问级别不能比父类高(等级观念),因为子类能够出席的场合父类都应该能出席,如果父类可访问级别比子类低就有了父类去不了的场合(儿子能去的地方爹一定要能去)。举例;方法、属性等暴露的返回值、参数的数据类型不能比方法、属性或者所在类的可访问级别低,因为这些方法、属性要能在高级场合出现,如果用到的类型却不能在这个场合出现就明显不合理了。=======================================================================
第一种情况,子类的访问级别不能比父类的高。
不然的话,会暴露父类的成员
改正:让子类的访问修饰符也为internal或者让父类的访问修饰符也为public
private →  低
public  →  高
public class Chinese : Person
{
    public string HuKou
    {
        get;
       set;
    }
}
把这里的public 改成internal就不报错了。
原因是,类本身的活动范围是internal,与Person的一致。Car类中的成员也不可能超出internal的范围。
public class Car
{
     <summary>
     车的所有者
     类的属性(CheZhu)的访问修饰符,不能比属性的类型(Person)的访问修饰符高。
    </summary>
           public Person CheZhu
    {
       get;
        set;
    }
}
参数类型的可访问性比方法本身的低
public class Manager
{
    public void RenKouDengJi(Person per)
   {
    }
}
方法返回值的可访问性比方法本身的低。
public class Manager
{
    public Person RenKouDengJi()
    {
        return null;
    }
}


作者: 张卫刚    时间: 2013-3-7 20:09
学习下,慢慢理解下




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2