“protected” methods in C#?

狂风中的少年 提交于 2019-12-04 22:40:02

Protected methods can be called from derived classes. Private methods can't.

That's the one and only difference between private and protected methods.

Often 'protected' is used when you want to have a child class override an otherwise 'private' method.

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");
    } 
}

So we have the override behavior we know and love from inheritance, without unnecessarily exposing the InternalUtilityMethod to anyone outside our classes.

var b = new Base();
b.Api();  // returns "do Base work"
var d = new Derived();
d.Api(); // returns "do Derived work"
  1. Protected methods can be accessed by inheriting classes where as private methods cannot.
  2. Keeping in mind that .aspx and .ascx file inherit from their code behind classes (default.aspx.cs), the protected methods can be accessed from within the .aspx/.ascx

Keep this in mind too: If you have a button and that button's OnClick is set to Button_Click

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

then the Button_Click method needs to have at least protected visibility to be accessible by the button.

You could get around this by added the following to you Page_Load method:

btn.Click += new EventHandler(Button_Click);

Some aspects of .NET such as ASP.NET create subclasses of your code-behind class at runtime. So an ASP.NET Page class for example inherits from its codebehind class. By making the method protected, the dynamically generated page class can easily hook up a button click event to a protected method in the base class that handles it.

If you have an inherited form (or any class for that matter), you would be able to invoke this function from within the sub-class.

Protected Methods are just like private methods. They could be accessed only by the members of the class. Only difference is unlike private members, protected members could be accessed by the derived classes as well.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!