访问级别约束
子类的访问级别不能比父类的高。(会暴露父类的成员)
类中属性或字段的访问级别不能比所对应的类型访问级别高。
方法的访问级别不能比方法的参数和返回值的访问级别高。
用于解决“可访问性不一致”的错误。
//第一种情况,子类的可访问级别比父类的高
//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;
// }
//}