24

protectedC# のようにメソッドを定義する利点は何ですか?

お気に入り :

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

このようなものと比較すると:

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

多くの本でそのような例を見てきましたが、なぜ、いつprivatevsを使用するのか理解できませんprotected

4

6 に答える 6

88

保護されたメソッドは、派生クラスから呼び出すことができます。プライベート メソッドはできません。

これが、プライベート メソッドと保護されたメソッドの唯一の違いです。

于 2009-05-30T17:44:35.777 に答える
8

多くの場合、「保護」は、子クラスで「プライベート」メソッドをオーバーライドする場合に使用されます。

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

そのため、InternalUtilityMethod をクラス外の誰かに不必要に公開することなく、継承から知っていて気に入っているオーバーライド動作が得られます。

var b = new Base();
b.Api();  // returns "do Base work"
var d = new Derived();
d.Api(); // returns "do Derived work"
于 2009-05-30T17:58:38.313 に答える
4
  1. 保護されたメソッドは、クラスを継承することでアクセスできますが、プライベート メソッドではアクセスできません。
  2. .aspx および .ascx ファイルはコード ビハインド クラス (default.aspx.cs) から継承されることに注意してください。保護されたメソッドには .aspx/.ascx 内からアクセスできます。

これも覚えておいてください: ボタンがあり、そのボタンの OnClick が Button_Click に設定されている場合

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

その場合、Button_Click メソッドは、ボタンからアクセスできるように、少なくとも可視性を保護する必要があります。

Page_Load メソッドに以下を追加することで、これを回避できます。

btn.Click += new EventHandler(Button_Click);
于 2009-07-07T21:48:30.083 に答える
2

ASP.NET などの .NET の一部の側面は、実行時にコード ビハインド クラスのサブクラスを作成します。したがって、たとえば ASP.NET Page クラスは、コード ビハインド クラスから継承します。メソッドを保護することにより、動的に生成されたページ クラスは、ボタン クリック イベントを、それを処理する基本クラスの保護されたメソッドに簡単に接続できます。

于 2009-05-30T17:44:58.490 に答える
1

継承されたフォーム (またはそのための任意のクラス) がある場合は、サブクラス内からこの関数を呼び出すことができます。

于 2009-05-30T17:45:04.963 に答える