[英]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.