如何阻止对派生类中的静态属性的set访问?

时间:2010-02-10 21:05:38

标签: c#

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

有任何方法可以强制执行此操作吗?

3 个答案:

答案 0 :(得分:3)

两者都是一回事。他们编译成相同的代码。

你要做的事情毫无意义。

对不起直言不讳。

答案 1 :(得分:2)

使用new

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

这并不能完全解决问题,因为您仍然可以转换为允许修改的ExeCommand。

更新:正如其他人所指出的,base在静态方法中无效。校正。

答案 2 :(得分:2)

目前还不清楚您要在这里实现的目标。

你可以通过声明相同的属性但隐藏setter来阻止ServerCommand.CommandHandler可写,正如Cory指出的那样,但为什么呢?调用者总是可以使用ExeCommand.CommandHandler来分配值。 ServerCommand从其基类共享静态成员。

也许如果你能解释一下你想要实现什么,可以提出更好的设计。