我想知道C#中protected
的含义,我们使用它的原因以及关键字的好处?
例如
protected int currentColorIndex;
请详细说明。
答案 0 :(得分:37)
每个人的回答都是类似的(MSDN的定义和/或摘录/链接),所以试图回答原来的3个问题:
含义:
任何标有'protected'的字段表示它只对自身和任何子节点(从中继承的类)可见。您将注意到在模型后面的ASP.NET Web窗体代码中,事件处理程序(例如Page_Load)被标记为“受保护”。这是因为ASPX Markup文件实际上从代码隐藏文件继承(查看@Page指令来证明这一点)。
我们使用它的原因:
受保护的辅助功能修饰符的常见用途是让儿童访问其父级属性。您可能有一个基类,许多子类派生自该基类。此基类可能具有公共属性。这是受保护财产的一个好例子 - 便于共同逻辑的重复使用和集中维护。
福利:
类似的问题“为什么我们使用它?”但基本上它给出了对属性的粗粒度控制。你不能只想到“当你使用受保护的”时。更多的是选择何时使用哪个辅助功能修饰符(私有,公共,内部,受保护)。因此,任何可访问性修饰符的好处都是同样的好处 - 提供健壮且一致的对象模型,最大化代码重用并最大限度地降低与错误公开的代码相关的安全风险。
希望有所帮助。
答案 1 :(得分:17)
正如其他人已经指出的那样:
protected关键字是成员 访问修饰符。受保护的成员是 在同班同学和 派生类实例。
这是一个小例子:
public class A
{
protected string SomeString;
public string SomeOtherString;
}
public class B : A
{
public string Wrapped
{
get { return this.SomeString; }
}
}
...
var a = new A();
var s = a.SomeOtherString; // valid
var s2 = a.SomeString; // Error
var b = new B();
var s3 = b.Wrapped; // valid
答案 2 :(得分:13)
“可以访问受保护的成员 在它所在的类中 声明,并在任何类中 派生自声明的类 这个成员。“
见
http://msdn.microsoft.com/en-us/library/bcd5672a(VS.71).aspx
答案 3 :(得分:7)
直接来自MSDN:
protected关键字是成员访问修饰符。受保护的成员可以在其类和派生类实例中访问。
使用受保护意味着您可以在类中使用可用于派生类的功能,但不能使用仅实例化对象的类。
This page比较了不同的访问修饰符并解释了它们的含义,并给出了不同对象(枚举,类,接口和结构)的默认修饰符表。
答案 4 :(得分:7)
另一个答案中提供的定义。为什么这样好?当protected
为其提供对基类实现的访问权限时,您不必将基类中的数据/代码复制到其派生类,而不会受到public
暗示的不受限制的外部使用的不必要的暴露。
答案 5 :(得分:4)
这意味着该字段仅对类本身和继承的类可见。
答案 6 :(得分:3)
这样想。一个类提供三个接口:
friend
之外)!第三个接口是OO中最难的一般设计挑战:什么可以合理地被覆盖(虚拟方法和属性),并且为了覆盖,需要什么其他功能(普通受保护的方法和属性)?因为这是一个很大的挑战,默认情况下使用sealed
课程实际上是一个好主意,与OO初学者经常看起来一样违反直觉,对他们来说似乎是一个不必要的障碍。