受保护的数据成员

时间:2010-09-28 07:22:38

标签: c# oop

为什么“数据成员”应该被宣布为“受保护”?可能的好处是什么?

3 个答案:

答案 0 :(得分:3)

受保护的成员可以通过子类访问,如果将它们声明为私有,则不是这种情况。

您将事物声明为私有或受保护以隐藏它们,以便只暴露外部世界应该使用的相关事物。

如果你想知道为什么要隐藏外部世界的成员,你应该得到一本关于面向对象的问题的书,因为那些是基本的概念。

答案 1 :(得分:0)

来自MSDN

只能通过同一个类或结构中的代码,或者从该类派生的类中访问类型或成员。

可能的好处:您限制对班级及其直接儿童的访问权限

答案 2 :(得分:0)

protected只是意味着子类能够看到该成员,但该成员不是该对象的公共API的一部分。

回答问题;这取决于你的“数据成员”的含义。如果你的意思是字段,那么IMO他们不应该。使某些状态(属性)protected如果子类需要该信息(特别是方法)是相当常见的,但它不是必需的外面的世界。

然而,更好的示例是protected virtual,其中继承者能够更改其他私有(对外界)成员的实现。典型的例子是:

protected virtual OnSomeMemberChanging(...) {}
protected virtual OnSomeMemberChanged(...) {}

继承者现在可以通过使用override更改实现来响应(甚至阻止)对键值的更改(通常但不总是在某个时刻调用base.Whatever()来调用原始实现)。