首先,这是代码,结果是期望的:
代码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
的{{1}}访问修饰符,事情变得不合时宜了:
代码2:
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();
}
}
}
也允许派生类以protected
的形式访问基类的情况下,为什么结果会有所不同?
答案 0 :(得分:3)
DerivedClass.Run
受到保护,因此Base
甚至看不到它。它调用从Run
继承的Base
方法。
答案 1 :(得分:2)
您的main
函数位于Base
,可以访问Base
实例上的公共/私有/受保护成员,并可以访问{{1}个实例上的公共成员}。