簡體   English   中英

C#:訪問修飾符的make方法調用方式不同

[英]C#: Access modifier make method invoke differently

首先,這是代碼,結果是預期的結果:

代碼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訪問基類,結果為什么會有所不同?

DerivedClass.Run受保護,因此Base甚至看不到它。 它調用從Base繼承的Run方法。

您的main功能位於Base ,並且可以訪問Base實例上的公共/私有/受保護成員,並可以訪問DerivedClass實例上的公共成員。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM