【发布时间】:2016-09-16 12:50:20
【问题描述】:
首先,这是代码,结果是预期的:
代码 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访问基类的情况下,为什么结果会不一样?
【问题讨论】:
标签: c# access-modifiers