首先,这是代码,结果是预期的:
代码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:
Derived class
Base class
但是,如果我将两个类的 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:
Base class
Base class
我的问题是,在protected
也允许派生类以public
方式访问基类的情况下,为什么结果会变得不同?
最佳答案
DerivedClass.Run
受到保护,因此 Base
甚至看不到它。它调用从 Base
继承的 Run
方法。
关于C#:访问修饰符使方法调用不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39531959/