簡體   English   中英

密封班的受保護成員

[英]protected members in a sealed class

我正在編寫一個WebPart,這意味着我繼承自System.Web.UI.WebControls.WebParts.WebPart並且覆蓋了protected override void CreateChildControls()的方法, protected override void CreateChildControls()

但是,如果可能的話,我想使類sealed ,但這會帶來兩個問題:僅密封類會給出警告“在密封類中聲明了新的受保護成員”。

將訪問修飾符從protected更改為privateinternal會導致編譯器錯誤,告訴我在繼承時無法更改修飾符。

這讓我感到納悶:將其密封並忽略警告是否有任何問題? 還是會導致進一步的負面影響? 似乎工作正常,但細節通常在其中。

編輯:我只是愚蠢。 “新的受保護成員”錯誤是針對確實未被覆蓋的函數,只是偶然地將其聲明為protected 謝謝你的實用技巧!

子類可以看到受保護的成員,因此您需要稍微更改類的接口。 如果您將其聲明為“私有”,則只能在本地看到它,因此不會影響接口。

聲明您的方法私有且不受保護,警告應消失。

確定要正確覆蓋嗎? 就我個人而言,我無法復制這種行為。 但是如果您擔心,可以使用

#pragma warning disable 0628
// Offending code
#pragma warning restore 0628

它說在類中聲明了一個新的受保護成員,這一事實令人有些擔憂。

嗯...我無法在簡單的測試代碼中重現此內容:

using System;

public class Base
{
    protected virtual void Foo()
    {
    }
}

public sealed class Derived : Base
{
    protected override void Foo()
    {
    }
}

NET 3.5SP1編譯時不發出警告。 確定要覆蓋基本方法嗎? 檢查您是否確實具有override修飾符。 (對不起,這聽起來很讓人光顧-我不是要指責您放松或其他任何事情。否則我只會感到難過...)

在我看來,這很愚蠢。 我會忽略警告,畢竟這只是說明您在做的事情是不合邏輯的,就像在抽象類型上使用了公共ctor一樣。 最壞的情況是有些混亂。

我認為我也有這種情況,但是僅在Compact Framework代碼中,在這種情況下是Full Framework嗎?

暫無
暫無

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

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