Подтвердить что ты не робот

"защищенные" методы в С#?

Каковы преимущества определения методов, protected в С#?

лайк:

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

По сравнению с чем-то вроде этого:

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

Я видел такие примеры во многих книгах, и я не понимаю, почему и когда они используют private и protected?

4b9b3361

Ответ 1

Защищенные методы могут быть вызваны из производных классов. Частные методы не могут.

Это единственное различие между частными и защищенными методами.

Ответ 2

Часто "protected" используется, когда вы хотите, чтобы дочерний класс переопределял метод 'private'.

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"

Ответ 3

  • Защищенные методы могут быть доступны путем наследования классов, где частные методы не могут.
  • Помня о том, что файлы .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);

Ответ 4

Некоторые аспекты .NET, такие как ASP.NET, создают подклассы вашего кода-класса во время выполнения. Таким образом, класс ASP.NET-страницы, например, наследуется от класса codebehind. Предоставляя защищенный метод, динамически созданный класс страниц может легко подключить событие нажатия кнопки к защищенному методу в базовом классе, который обрабатывает его.

Ответ 5

Если у вас есть унаследованная форма (или любой класс, если на то пошло), вы сможете вызвать эту функцию из подкласса.

Ответ 6

Защищенные методы похожи на частные методы. Доступ к ним могли получить только члены класса. Разница лишь в том, что в отличие от частных членов, защищенные члены могут быть доступны и для производных классов.