"protected" methods in C#?
Asked Answered
W

6

26

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 vs protected?

Worldlywise answered 30/5, 2009 at 17:42 Comment(3)
but in these example of this book there is no inheritance.Worldlywise
plz i can't understand we they did so....Worldlywise
Can you derive a form from this class? Then you may want to be able to call KeyDemo_KeyPress from that class, which would be impossible if it was private. But since you may not want other classes to be able to access the function, it can't be public. Hence, it is protected.Renaerenaissance
E
92

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

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

Equivalence answered 30/5, 2009 at 17:44 Comment(1)
This should have been marked as the accepted answer! ;) It's important to realise that 'protected' is an access modifier. Here's a comparison of them all: msdn.microsoft.com/en-us/library/ba0a1yw2.aspx And for all the modifiers: msdn.microsoft.com/en-us/library/6tcf2h8w.aspxKaraganda
D
8

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"
Demars answered 30/5, 2009 at 17:58 Comment(3)
This is incorrect. protected != virtual. Methods must be virtual to override them in a derived class. A virtual method can be protected, but it can also be public or internal. A protected method cannot be overridden unless it is virtual.Scout
You're right I should have also marked them virtual. With that typo fixed, I do still believe this is a common use case for 'protected'. I'll edit the code above...Demars
No, it's a common use case for "virtual". The question is about "protected", not "virtual".Nahshu
B
4
  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);
Biltong answered 7/7, 2009 at 21:48 Comment(0)
S
2

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.

Scout answered 30/5, 2009 at 17:44 Comment(1)
This is a reasonable example of a particular case where "protected" is used, but does not address the fact that the example is also an extremely narrow scope of what protected is for.Ogpu
A
1

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.

Asha answered 30/5, 2009 at 17:45 Comment(0)
M
0

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.

Moony answered 6/6, 2018 at 11:53 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.