受保护的关键字C#

Nis*_*mar 15 c# protected

我想知道protectedC#的含义是什么,为什么我们使用它,以及关键字的好处?

例如

protected int currentColorIndex;

请详细说明.

RPM*_*984 40

每个人的答案都是类似的(MSDN的定义和/或摘录/链接),所以试图回答你原来的3个问题:

意义:

标有"受保护"的任何字段表示它仅对自身和任何子项(从中继承的类)可见.您将注意到在模型后面的ASP.NET Web窗体代码中,事件处理程序(例如Page_Load)被标记为"受保护".这是因为ASPX Markup文件实际上是从代码隐藏文件继承的(查看@Page指令来证明这一点).

我们为什么使用它:

受保护的可访问性修饰符的常见用途是让子级访问它的父级属性.您可能有一个基类,许多子类派生自该基类.此基类可能具有公共属性.这是受保护财产的一个好例子 - 便于共同逻辑的重复使用和集中维护.

好处:

类似的问题"为什么我们使用它?" 但基本上它给出了对属性的粗粒度控制.你不能只想到"当你使用受保护的"时.更多的是选择何时使用哪个辅助功能修饰符(私有,公共,内部,受保护).因此,任何可访问性修饰符的好处都是相同的 - 提供健壮且一致的对象模型,最大化代码重用并最大限度地降低与错误公开的代码相关的安全风险.

希望有所帮助.


Kla*_*sen 19

正如其他人已经指出的那样:

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
Run Code Online (Sandbox Code Playgroud)

  • @ Box9,`b.SomeString`无效,因为它是受保护的。“保护”基本上只表示“私有”,但是继承类可以访问它(作为“私有”变量)。 (2认同)

And*_*son 12

"受保护的成员可以从声明它的类中访问,也可以从声明该成员的类派生的任何类中访问."

看到

http://msdn.microsoft.com/en-us/library/bcd5672a(VS.71).aspx

  • -1:不回答"为什么我们使用它"的问题. (5认同)
  • @Nishant - 不是这样的:'private'约束成员仅由此类使用,并且对任何其他类都不可见. (4认同)

Chr*_*isF 7

直接来自MSDN:

protected关键字是成员访问修饰符.受保护的成员可在其类和派生类实例中访问.

资源

使用受保护的方法,您可以在可用于派生类的类中具有功能,但不能在仅实例化该对象的类中具有功能.

此页面比较了不同的访问修饰符并解释了它们的含义,并给出了不同对象(枚举,类,接口和结构)的默认修饰符表.


Ste*_*end 6

另一个答案提供的定义.为什么这样好?当protected向基类提供对基类实现的访问时,您不必将数据/代码从基类复制到其派生类,而不会不必要地暴露于不受限制的外部使用public.