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
有任何方法可以强制执行此操作吗?
答案 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从其基类共享静态成员。
也许如果你能解释一下你想要实现什么,可以提出更好的设计。