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

在C#中将方法定义为“受保护”有什么好处? 喜欢 :

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

与这样的事情相比:

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

我在书中看过很多例子,我不明白他们为何以及何时私有和保护?

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

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

当你想让一个子类重写一个“私有”方法时,通常使用’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"); } } 

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

 var b = new Base(); b.Api(); // returns "do Base work" var d = new Derived(); d.Api(); // returns "do Derived work" 
  1. 可以通过inheritance类来访问受保护的方法,而私有方法则不能。
  2. 请记住.aspx和.ascx文件inheritance自其类后面的代码(default.aspx.cs),可以从.aspx / .ascx中访问受保护的方法

记住这一点:如果你有一个按钮,那个按钮的OnClick设置为Button_Click

  

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

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

 btn.Click += new EventHandler(Button_Click); 

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

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

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