1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
abstract class A { protected abstract void Test(); } class B : A { protected override void Test() { Console.WriteLine( "B.Test()" ); } } class C : B { protected override void Test() { Console.WriteLine( "C.Test()" ); } public void GetBaseTest() { base .Test(); } public void GetThisTest() { this .Test(); } } class Program { static void Main( string [] args) { C c = new C(); c.GetBaseTest(); c.GetThisTest(); Console.ReadKey(); } } |
对基类中protected成员的访问,必须满足:
基类中的protected成员,只能从(Ⅰ)基类内部非静态方法访问(Ⅱ)继承这个基类的子类内部的非静态方法访问
__________________________________________________
protected 是既不同于 public 的全公开、也不同于 private 的全不公开的,是一种半公开控制级别,外界无法直接访问这个控制级别的成员,但是派生类的 base 指针可以获得访问能力。子类(派生类)相对于父类来说就是“外界”,在外界访问不了 protected 成员;但派生类 base(本质上是个指针)可以访问。 只需要记住,public 是子类、base都可访问。private 是子类、base都不可访问。protected 是子类不可访问、base可访问。