我想知道protected
C#中的含义是什么,我们为什么使用它,以及关键字的好处?
例如
protected int currentColorIndex;
请详细说明。
每个人的答案都是相似的(定义和/或摘录/链接到 MSDN),所以我试图回答你原来的 3 个问题:
含义:
任何标有“受保护”的字段意味着它只对自身和任何子项(继承自它的类)可见。您会注意到在模型背后的 ASP.NET Web 窗体代码中,事件处理程序(例如 Page_Load)被标记为“受保护”。这是因为 ASPX 标记文件实际上继承自代码隐藏文件(查看 @Page 指令来证明这一点)。
为什么我们使用它:
受保护的可访问性修饰符的常见用途是让孩子可以访问它的父母属性。您可能有一个基类,许多子类都从该基类派生。这个基类可能有一个共同的属性。这对于受保护的属性来说是一个很好的案例 - 以促进公共逻辑的重用和集中维护。
好处:
类似于“我们为什么使用它?”的问题。但本质上,它提供了对属性的粗粒度控制。你不能只考虑“当你使用受保护的时候”。更多的是选择何时使用哪个可访问性修饰符(私有、公共、内部、受保护)。因此,其好处实际上与任何可访问性修饰符的好处相同——提供健壮且一致的对象模型,最大限度地重复使用代码并最大限度地减少与错误公开代码相关的安全风险。
希望有帮助。
正如其他人已经指出的那样:
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
“受保护的成员可以从声明它的类中访问,也可以从从声明该成员的类派生的任何类中访问。”
看
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/protected
另一个答案中提供了定义。为什么这样好?当提供对基类实现的访问权限时,您不必将数据/代码从基类复制到其派生类protected
,而不会不必要地暴露于public
.
这意味着该字段仅对类本身和继承的类可见。
像这样想。一个类呈现三个接口:
friend
)!第三个接口是 OO 中最难的一般设计挑战:可以合理地覆盖什么(虚拟方法和属性),为了覆盖,还需要什么其他功能(普通的受保护方法和属性)?因为这是一个如此大的挑战,所以sealed
默认设置类实际上是一个好主意,但在 OO 初学者看来,这常常是违反直觉的,对他们来说,这似乎是一个不必要的障碍。