我想了解在C#中,protected
的含义是什么,我们为什么要使用它以及这个关键字的好处是什么?
例如:
protected int currentColorIndex;
请详细说明。
我想了解在C#中,protected
的含义是什么,我们为什么要使用它以及这个关键字的好处是什么?
例如:
protected int currentColorIndex;
请详细说明。
每个人的答案都很相似(定义和/或MSDN链接的摘录),所以我将尝试回答您最初的三个问题:
意义:
任何标记为'protected'的字段表示它仅对自身和任何子级(继承自它的类)可见。您会注意到在ASP.NET Web Forms代码后台模型中,事件处理程序(如Page_Load)被标记为'protected'。这是因为ASPX标记文件实际上是从代码后台文件继承而来的(查看@Page指令以证明此点)。
为什么使用它:
protected访问修饰符的常见用途是使子类能够访问其父类的属性。您可能有一个基类,许多子类从中派生。这个基类可能有一个公共属性。这是使用protected属性的好例子-为了便于重用和集中维护公共逻辑。
好处:
这与“为什么使用它?”的问题有些类似,但本质上它提供了粗粒度的属性控制。您不能仅考虑“何时使用protected”。更多的情况是选择何时使用哪种访问修饰符(private、public、internal、protected)。因此,好处实际上与任何访问修饰符的好处相同-提供健壮一致的对象模型,最大化代码重用并最小化与不正确暴露的代码相关的安全风险。
希望这可以帮助到您。
protected void WalkingAndRunning()
方法。 "Dad"类被"Son"类继承。在那里使用protected void WalkingAndRunning()
方法是否可行?只是好奇。 - Musikero31正如其他人已经指出的:
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
b.SomeString
是否有效?这是MSDN上没有解释的部分。 - David Tangb.SomeString
不合法,因为它是protected
。 protected
基本上意味着private
,但有一个例外,即继承类可以访问它(作为private
变量)。 - Klaus Byskov PedersenB
类的一个静态方法中。 - David Tang受保护成员可以从定义该成员的类以及任何派生自定义该成员的类中访问。
详情请参阅:
https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/protected
"在另一个答案中提供了定义。这为什么是好的呢?因为当使用protected
时,派生类可以访问基类实现,而不必在派生类中复制数据/代码,同时避免了public
所暴露的不受限制的外部使用。
可以这样理解。一个类提供了三个接口:
friend
之外)!sealed
类实际上是个好主意,尽管对于面向对象的初学者来说似乎是不必要的障碍。