1. 程式人生 > >可見性和可達性,C#和C++

可見性和可達性,C#和C++

看C# premier有感,

以下是C#語言寫的類

 

class aBase{protect string s;}

class aDerived:aBase{new private string s;}

 

new 關鍵字用以提示編譯器,s 是一個新的變數,故意隱藏基類裡面的s。

下面定義一個新的子類,

class aMostDerived:aDerived{

  void set(string str){s = str;}

}

在C++語言裡面,編譯器是先考慮可見性,再考慮可達性,因為aDerived 裡面的s是繼承層次裡面最近的一個s,所以會鎖定aDerived裡面的s,然後考慮可達性的時候,會報錯,因為這個s是private成員,不可達的。

在C#語言裡面,編譯器會先考慮可達性,aBase裡面的s是public成員,aDerived裡面的s是private成員,會先鎖定aBase裡面的s,編譯器不會報錯。

如果考慮可達性的時候,同時選中了兩個s,就看可見性,繼承層次哪個比較近了。