首先,這裏是代碼,結果是什麼期待: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:
派生類
基類
但是,如果我同時更改兩個班Run()
訪問修飾符從public
到protected
,事情變得出的期望:
代碼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