"protected" methods in C#?
Solution 1
Protected methods can be called from derived classes. Private methods can't.
That's the one and only difference between private and protected methods.
Solution 2
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"
Solution 3
- Protected methods can be accessed by inheriting classes where as private methods cannot.
- 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);
Solution 4
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.
Solution 5
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.
Sherif
Updated on July 14, 2022Comments
-
Sherif almost 2 years
What are the benefits to defining methods as
protected
in C#?like :
protected void KeyDemo_KeyPress( object sender, KeyPressEventArgs e ) { // some code }
As compared to something like this:
private void FormName_Click( object sender, EventArgs e ) { //some code }
I've seen such examples in many books and I don't understand why and when do they use
private
vsprotected
?