为什么“数据成员”应该被宣布为“受保护”?可能的好处是什么?
答案 0 :(得分:3)
受保护的成员可以通过子类访问,如果将它们声明为私有,则不是这种情况。
您将事物声明为私有或受保护以隐藏它们,以便只暴露外部世界应该使用的相关事物。
如果你想知道为什么要隐藏外部世界的成员,你应该得到一本关于面向对象的问题的书,因为那些是基本的概念。
答案 1 :(得分:0)
答案 2 :(得分:0)
protected
只是意味着子类能够看到该成员,但该成员不是该对象的公共API的一部分。
回答问题;这取决于你的“数据成员”的含义。如果你的意思是字段,那么IMO他们不应该。使某些状态(属性)protected
,如果子类需要该信息(特别是方法)是相当常见的,但它不是必需的外面的世界。
然而,更好的示例是protected virtual
,其中继承者能够更改其他私有(对外界)成员的实现。典型的例子是:
protected virtual OnSomeMemberChanging(...) {}
protected virtual OnSomeMemberChanged(...) {}
继承者现在可以通过使用override
更改实现来响应(甚至阻止)对键值的更改(通常但不总是在某个时刻调用base.Whatever()
来调用原始实现)。