C#访问权限修饰符:public、internal、protected、private、protected internal
原创
©著作权归作者所有:来自51CTO博客作者SCscHero的原创作品,请联系作者获取转载授权,否则将追究法律责任
【概念】访问权限修饰符:可以用来修饰类、字段、属性和方法。用来描述被修饰的内容可访问的范围,访问权限修饰符有public、internal、protected、private、protected internal;常用的有public、private;
权限从小到大依次如下:
private:私有的权限,可以用来修饰字段、属性和方法。只能在当前类中访问;字段、属性和方法的默认访问权限就是private。
protected:可以用来修饰字段、属性和方法。可以在当前类中访问,也可以在子类(包含子类的子类)及跨项目继承的子类中访问。
internal:可以用来修饰类、字段、属性和方法。在整个项目中生效。类的默认的访问权限是internal;
protected internal:可以用来修饰字段、属性和方法,在当前项目中生效,在跨项目的子类中生效。
public:可以用来修饰类、字段、属性和方法,在整个解决方案生效。
【案例1】父类中的private修饰的字段,子类能访问到吗?答案:不能。
class Dog
{
private int age;
void Show()
{
Console.WriteLine(age);
}
}
class HaShiQi : Dog
{
void Display()
{
//此处age会报错,"Dog.age"不可访问,因为它具有一定的保护级别
Console.WriteLine(age);
}
}
【案例2】父类中的protected修饰的字段,跨类能访问到吗?答案:不能。
class Dog
{
protected int age;
void Show()
{
Console.WriteLine(age);
}
}
class HaShiQi : Dog
{
void Display()
{
Console.WriteLine(age);
}
}
class Cat
{
void BeatDog(Dog d)
{
//此处age会报错,"Dog.age"不可访问,因为它具有一定的保护级别
Console.WriteLine(d.age);
}
}
【案例3】父类中的protected修饰的字段,子类的子类能访问到吗?答案:能。
class Dog
{
protected int age;
void Show()
{
Console.WriteLine(age);
}
}
class HaShiQi : Dog
{
void Display()
{
Console.WriteLine(age);
}
}
class xiaoha : HaShiQi
{
void Test()
{
Console.WriteLine(age);
}
}
【注意事项1】父类和子类的修饰符中,父类访问权限一定要大于子类。否则会提示如图错误信息。
【注意事项2】在public权限的类中,如果某个字段或者某个方法中使用到了非public权限的类型,程序会报错,要将类型该为一致的权限修饰。
class Animal { }
class Point { }
public class Circle
{
//此处center、SetCenter会报错:可访问性不一致,字段类型"Point"低于.......
public Point center;
public void SetCenter(Point c)
{
}
}