Méthodes «protégées» en C #?

Quels sont les avantages de définir des méthodes comme “protégées” en C #? comme :

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

Par rapport à quelque chose comme ça:

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

J’ai vu dans les livres de nombreux exemples et je ne comprends pas pourquoi et quand sont-ils privés et protégés?

Les méthodes protégées peuvent être appelées à partir de classes dérivées. Les méthodes privées ne peuvent pas.

C’est la seule et unique différence entre les méthodes privées et protégées.

«Protégé» est souvent utilisé lorsque vous souhaitez qu’une classe enfant substitue une méthode par ailleurs «privée».

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

Nous avons donc le comportement prioritaire que nous connaissons et aimons dans l’inheritance, sans exposer inutilement la méthode InternalUtilityMethod à quiconque en dehors de nos classes.

 var b = new Base(); b.Api(); // returns "do Base work" var d = new Derived(); d.Api(); // returns "do Derived work" 
  1. Il est possible d’accéder aux méthodes protégées en héritant des classes, contrairement aux méthodes privées.
  2. Gardant à l’esprit que les fichiers .aspx et .ascx héritent de leur code derrière des classes (default.aspx.cs), il est possible d’accéder aux méthodes protégées à partir de .aspx / .ascx

Gardez cela à l’esprit aussi: si vous avez un bouton et que OnClick de ce bouton est défini sur Button_Click

  

alors la méthode Button_Click doit avoir au moins une visibilité protégée pour être accessible par le bouton.

Vous pouvez contourner ce problème en ajoutant ce qui suit à votre méthode Page_Load:

 btn.Click += new EventHandler(Button_Click); 

Certains aspects de .NET, tels que ASP.NET, créent des sous-classes de votre classe code-behind lors de l’exécution. Ainsi, une classe de pages ASP.NET, par exemple, hérite de sa classe codebehind. En protégeant la méthode, la classe de pages générée dynamicment peut facilement associer un événement de clic de bouton à une méthode protégée de la classe de base qui le gère.

Si vous avez un formulaire hérité (ou n’importe quelle classe d’ailleurs), vous pourrez invoquer cette fonction à partir de la sous-classe.

Les méthodes protégées sont comme des méthodes privées. Ils ne pouvaient être consultés que par les membres de la classe. Seule différence, contrairement aux membres privés, les classes dérivées peuvent également accéder aux membres protégés.