我希望这不是重复的,但我无法通过Google或SO搜索找到。如果我想强制一个方法的重载方法的实现的可访问性为protected
,是我的唯一选择,要么创建为abstract
或protected virtual
?我知道接口指定了声明,但将可访问性/范围留给了类实现,但我想确定。子方法的限制范围
我想知道/确定是否限制方法范围的唯一方法是通过abstract
\ protected virtual
给出“这适用于类实现或子覆盖实现”的语义。
要说明的代码示例。我知道我可以做到以下几点,并且像这样限制实现的范围;
public class BaseClass
{
protected virtual void OnlyMeOrChildrenCanDoAction()
{
// leave empty as current class is structural/conceptual
// but child instances may need it
}
}
通过做上述保证了我的孩子实现只override
OnlyMeorChildrenCanDoAction()
为protected
但不public
可以。
但是,有没有另一种方法限制到protected
而不诉诸于abstract
或protected virtual
?创建这种方法的示例是Object.Finalize()
,如here所示。
或者,为了稍微反转问题,为什么要创建一个方法为protected virtual
,除非确保任何实现的范围有限?或者还有另一种方法来做同样的事情吗?
我很难理解你想问什么。我会建议添加一些代码示例。我不是downvoter,虽然 – maccettura
我仍然很迷路。 – maccettura
@maccettura如果我创建一个方法'保护虚拟'我保证只有子实现可以使用'protected'方法。我不能让子实现将它覆盖为“public”。上述方法是否仅限于此? – DiskJunky