【概念】访问权限修饰符:可以用来修饰类、字段、属性和方法。用来描述被修饰的内容可访问的范围,访问权限修饰符有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】父类和子类的修饰符中,父类访问权限一定要大于子类。否则会提示如图错误信息。

C#访问权限修饰符:public、internal、protected、private、protected internal_子类


【注意事项2】在public权限的类中,如果某个字段或者某个方法中使用到了非public权限的类型,程序会报错,要将类型该为一致的权限修饰。

class Animal { }

class Point { }

public class Circle
{
//此处center、SetCenter会报错:可访问性不一致,字段类型"Point"低于.......
public Point center;
public void SetCenter(Point c)
{

}
}