24

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

像 :

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

与这样的东西相比:

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

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

4

6 回答 6

88

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

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

于 2009-05-30T17:44:35.777 回答
8

当您希望子类覆盖其他“私有”方法时,通常会使用“受保护”。

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"
于 2009-05-30T17:58:38.313 回答
4
  1. 受保护的方法可以通过继承类来访问,而私有方法不能。
  2. 请记住 .aspx 和 .ascx 文件继承自它们的代码后面的类 (default.aspx.cs),可以从 .aspx/.ascx 中访问受保护的方法

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

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

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

您可以通过在 Page_Load 方法中添加以下内容来解决此问题:

btn.Click += new EventHandler(Button_Click);
于 2009-07-07T21:48:30.083 回答
2

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

于 2009-05-30T17:44:58.490 回答
1

如果你有一个继承的形式(或任何类),你将能够从子类中调用这个函数。

于 2009-05-30T17:45:04.963 回答
0

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

于 2018-06-06T11:53:12.227 回答