C#中的“受保护”方法?

时间:2009-05-30 17:42:29

标签: c# .net visual-studio oop access-modifiers

在C#中将方法定义为protected有什么好处?

喜欢:

protected void KeyDemo_KeyPress( object sender, KeyPressEventArgs e ) 
{
    // some code
}

与此类似:

private void FormName_Click( object sender, EventArgs e )
{
    //some code
}

我在很多书中都看过这样的例子,我不明白为什么以及何时使用private vs protected

6 个答案:

答案 0 :(得分:80)

可以从派生类调用受保护的方法。私人方法不能。

这是私有和受保护方法之间唯一的区别。

答案 1 :(得分:7)

当您希望让子类覆盖其他“私有”方法时,通常使用“protected”。

public class Base {
    public void Api() {
       InternalUtilityMethod();
    }
    protected virtual void InternalUtilityMethod() {
       Console.WriteLine("do Base work");
    }
}

public class Derived : Base {
    protected override void InternalUtilityMethod() {
       Console.WriteLine("do Derived work");
    } 
}

因此,我们知道并且喜欢继承的覆盖行为,而不必将InternalUtilityMethod暴露给我们类之外的任何人。

var b = new Base();
b.Api();  // returns "do Base work"
var d = new Derived();
d.Api(); // returns "do Derived work"

答案 2 :(得分:4)

  1. 可以通过继承类来访问受保护的方法,而私有方法则不能。
  2. 请记住.aspx和.ascx文件继承自其类后面的代码(default.aspx.cs),可以从.aspx / .ascx
  3. 中访问受保护的方法

    请记住这一点:如果您有一个按钮并且该按钮的OnClick设置为Button_Click

    <asp:Button id="btn" runat="server" OnClick="Button_Click" />
    

    然后Button_Click方法需要具有至少受保护的可见性才能被按钮访问。

    你可以通过向你的Page_Load方法添加以下内容来解决这个问题:

    btn.Click += new EventHandler(Button_Click);
    

答案 3 :(得分:2)

.NET的某些方面(如ASP.NET)在运行时创建代码隐藏类的子类。因此,ASP.NET Page类继承自其codebehind类。通过使方法受到保护,动态生成的页面类可以轻松地将按钮单击事件连接到处理它的基类中的受保护方法。

答案 4 :(得分:1)

如果您有一个继承的表单(或任何类),您将能够从子类中调用此函数。

答案 5 :(得分:0)

受保护的方法就像私有方法一样。它们只能由班级成员访问。唯一的区别不同于私有成员,受保护的成员也可以被派生类访问。