簡體   English   中英

如何防止對派生類中的靜態屬性進行設置訪問?

[英]How do I prevent set access to a static property in the derived class?

public abstract class ExeCommand
{
    private static object commandHandler;
    public static object CommandHandler
    {
        get { return commandHandler; }
        set { commandHandler = value; }
    }
}

class ServerCommand : ExeCommand
{
}

這就是它的基本內容。 我想允許

ExeCommand.CommandHandler = myCommandHandler

但不是

ServerCommand.CommandHandler = myCommandHandler

有什么辦法可以強制執行嗎?

兩者是同一回事。 它們編譯為相同的代碼。

您試圖做的事毫無意義。

抱歉,直白了。

使用new

class ServerCommand : ExeCommand
{
    public new static object CommandHandler
    {
        get { return ExeCommand.CommandHandler; }
    }
}

這不能完全解決問題,因為您仍然可以強制轉換為允許修改的ExeCommand。

更新:正如其他人指出的那樣, base在靜態方法中無效。 已更正。

目前尚不清楚您要在這里實現什么。

如Cory所指出的,您可以通過聲明相同的屬性但隱藏setter來防止ServerCommand.CommandHandler可寫,但是為什么呢? 調用方始終可以僅使用ExeCommand.CommandHandler來分配值。 ServerCommand共享其基類中的靜態成員。

也許如果您能解釋您試圖實現更好的設計的想法,那么可能會被提出。

暫無
暫無

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

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