首先,这里是代码,结果是什么期待: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