まず起動し、ここにコードがあるとの結果が期待するものである:C#の:アクセス修飾子メソッドを作る
コード1:
using System;
namespace ConsoleApplication11
{
class DerivedClass : Base
{
public new void Run()
{
Console.WriteLine("Derived class");
}
}
class Base
{
public void Run()
{
Console.WriteLine("Base class");
}
static void Main(string[] args)
{
DerivedClass dc = new DerivedClass();
Base bc = new Base();
dc.Run();
bc.Run();
}
}
}
結果1:派生
をクラス
ベースクラス
しかし、私はpublic
からprotected
に二つのクラスRun()
アクセス修飾子の両方を変更した場合、事はアウトの期待になった:
コード2:
using System;
namespace ConsoleApplication11
{
class DerivedClass : Base
{
protected new void Run()
{
Console.WriteLine("Derived class");
}
}
class Base
{
protected void Run()
{
Console.WriteLine("Base class");
}
static void Main(string[] args)
{
DerivedClass dc = new DerivedClass();
Base bc = new Base();
dc.Run();
bc.Run();
}
}
}
結果2:
をベースクラス
基本クラス
私の質問は、protected
は、派生クラスがpublic
として、基本クラスにアクセスすることを許可されていることの状況下で、なぜ結果が異なることになるんですか?
'Base.Run'を' protected'に変更しても、この場合は変更されません。すべての 'Base'メンバにはまだ見えます。 – kiziu