C#:継承とメソッドの隠蔽で、privateスコープからのアクセス時のみメソッド実装を変える
基底クラスのpublicなメソッドに対し、派生クラスでnewキーワードを用いてprivateなメソッドとして隠蔽を行なうと、
クラス外から呼び出した場合(publicなスコープでのアクセス時)は基底クラスの実装で動作し、
クラス内から呼び出した場合(privateなスコープでのアクセス時)は派生クラスの実装で動作しました。
class Program { static void Main(string[] args) { Console.WriteLine(new BaseClass().MyMethod()); Console.WriteLine(new SuperClass().MyMethod()); Console.WriteLine(new SuperClass().CallLocalMethod()); Console.ReadLine(); } } public class BaseClass { //隠ぺい対象のメソッド public string MyMethod() { return "aaa"; } } public class SuperClass : BaseClass { //privateなメソッドで隠ぺい private new string MyMethod() { return "bbb"; } //ローカルスコープでのMyMethodの結果を返すメソッド public string CallLocalMethod() { return MyMethod(); } }
結果:
aaa
aaa
bbb
MSDNにも記載があります。(https://msdn.microsoft.com/ja-jp/library/aa691135(v=vs.71).aspx)