[英]protected members in a sealed class
我正在編寫一個WebPart,這意味着我繼承自System.Web.UI.WebControls.WebParts.WebPart
並且覆蓋了protected override void CreateChildControls()
的方法, protected override void CreateChildControls()
。
但是,如果可能的話,我想使類sealed
,但這會帶來兩個問題:僅密封類會給出警告“在密封類中聲明了新的受保護成員”。
將訪問修飾符從protected
更改為private
或internal
會導致編譯器錯誤,告訴我在繼承時無法更改修飾符。
這讓我感到納悶:將其密封並忽略警告是否有任何問題? 還是會導致進一步的負面影響? 似乎工作正常,但細節通常在其中。
編輯:我只是愚蠢。 “新的受保護成員”錯誤是針對確實未被覆蓋的函數,只是偶然地將其聲明為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.