前幾天我一個朋友問我,在子類中爲什麼不能訪問父類的protected方法?
她在某本書上看到的代碼大概是如下所示:
public class A
{
public string Name = "";
protected int Age = 0;
}
public class AB : A
{
public void Init()
{
A a = new A();
a.Name = "lifengguo";
a.Age = 24;
}
}
但是她編譯時總是不能通過,她問我爲什麼?是我的理解是:
Protected是受保護成員,它在它的類中可訪問並且可由派生類訪問。
上面的一句包含了三層意思:
1、 類的本身可以訪問;
2、 派生類中可以訪問;
3、 類的實例是不能夠訪問Protected成員的。
下面代碼是在類的本身使用了Protected成員
public class A
{
public string Name = "";
protected int Age = 0;
public A()
{
Name = "lifengguo";
Age = 24;
}
}
下面的代碼是在派生類中使用了Protected成員
public class AB : A
{
public AB()
{
base.Name = "黎鋒果";
base.Age = 24;
}
}
下面的代碼是類的實例訪問類的成員:
public class C
{
public void Init()
{
A a = new A();
AB ab = new AB();
a.Name = "lifengguo"; //OK
ab.Name = "黎鋒果"; //OK
a.Age = 24; //Error
ab.Age = 24; //Error
}
}