簡體   English   中英

覆蓋方法中訪問修飾符的作用是什么?

[英]What's the purpose of access modifier in overriden method?

為什么在C#中,如果不進行更改,我需要指定要覆蓋的方法的訪問修飾符? 在這種情況下根本不指定任何訪問修飾符會更簡單,更合乎邏輯嗎?

(請澄清一下:我之所以寫這個問題,並不是因為我認為自己比語言設計師更聰明,而是因為我確定他們有充分的理由使我尚無法理解。)

編輯:我不是在問為什么我們不能更改訪問修飾符,而是在問為什么我們必須冗余地指定它。

雖然我不是語言設計師之一,但我認為強迫您指定它是完全合理的:

  • 讀取代碼的任何人都立即知道訪問權限,而不必檢查原始聲明
  • 更改原始聲明的訪問方式是一種重大更改,這對於覆蓋的代碼而言更加明顯
  • 它使一個方法恰巧覆蓋了與非覆蓋方法一致的更高聲明。 (沒有訪問修飾符的方法有時是公共的,有時是私有的,這取決於重寫,這很奇怪。)

基本上,冗余有時是一件好事:)

為了說明喬恩在代碼中的觀點,請考慮以下幾點:

class LevelOne
{
    public virtual void SayHi()
    {
        Console.WriteLine("Hi!");
    }
}
class LevelTwo : LevelOne
{
    override void SayHi()
    {
        Console.WriteLine("Hi!");
    }
}
class LevelThree : LevelTwo
{
    override void SayHi()
    {
        Console.WriteLine("Hi!");
    }
}

廣告無限。 現在,假設您處於n深度的派生類中,則必須一直遵循繼承層次結構回到原始基類,以找出方法的訪問修飾符。 簡直太煩人了!

為了促進其他不編寫代碼的開發人員對代碼的理解。 當您閱讀覆蓋時,您知道您進行了多態

暫無
暫無

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

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