不允许使用属性设置器时抛出什么异常?

Ray*_*Ray 19 .net c# inheritance properties

我有一个具有虚拟属性的基类:

public virtual string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)

然后我有一个派生类,只覆盖属性的getter

public override string Name
{
    get { return "Fixed Name"; }
}
Run Code Online (Sandbox Code Playgroud)

问题是这只会覆盖吸气剂.如果有人调用setter,则会调用基类setter,并且调用者不会知道它无效.

所以我想我会做类似的事情:

public override string Name
{
    get { return "Fixed Name"; }
    set { throw new Exception(); } //which exception type?
}
Run Code Online (Sandbox Code Playgroud)

所以两个(相关问题):

  1. 我有更好的模式可供使用吗?
  2. 如果我应该使用上面的模式,使用什么例外?

编辑:为什么一个例外优先于另一个例外的一些原因是好的.我的同事和我在NotSupported和之间有同样的论点InvalidOperation.

Pet*_*hev 25

抛出NotSupportedException异常.从链接引用:

基类中不支持某些方法,期望这些方法将在派生类中实现.派生类可能只实现基类中的方法的子集,并为不支持的方法抛出NotSupportedException.

我的观点是InvalidOperationException不是一个正确的选项.从MSDN引用:

方法调用对于对象的当前状态无效时引发的异常.

在你的情况下,没有关于当前状态的信息.这是班级合同不支持该操作.

  • @Petar:同意 - 删除我的回答.我一直在寻找UnsupportedOperationException,它是Java中的合适的,并且在找不到它之后会出现InvalidOperationException,这是因为你给出的原因是错误的. (3认同)

And*_*rey 8

它打破了利斯科夫替代原则,这就是为什么这是个坏主意.