C#:访问修饰符使方法调用不同

标签 c# access-modifiers

首先,这是代码,结果是预期的:

代码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/

相关文章:

c# - 在 Windows Phone 8.1 中如何将 IBuffer 转换为字节数组?

c# - 格式化 - 添加逗号,2 位小数到单元格值 vb.net excel interop

c# - 为什么 resharper 不建议删除多余的访问修饰符?

Java protected 修饰符没有按预期工作

c# - 如何在 C# 中读取 IHTMLComputedStyle 接口(interface)的 fontName 属性?

c# - MS Access C#.NET 中的 SQL Server

C# 不一致的可访问性 : return type is less accessible than method

C# - 类设计和访问修饰符

Java:没有包访问的子类访问

c# - Java 到 C# : Extends in Generic