Ответ 1
Защищенные методы могут быть вызваны из производных классов. Частные методы не могут.
Это единственное различие между частными и защищенными методами.
Каковы преимущества определения методов, protected
в С#?
лайк:
protected void KeyDemo_KeyPress( object sender, KeyPressEventArgs e )
{
// some code
}
По сравнению с чем-то вроде этого:
private void FormName_Click( object sender, EventArgs e )
{
//some code
}
Я видел такие примеры во многих книгах, и я не понимаю, почему и когда они используют private
и protected
?
Защищенные методы могут быть вызваны из производных классов. Частные методы не могут.
Это единственное различие между частными и защищенными методами.
Часто "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"
Помните об этом: если у вас есть кнопка, а на этой кнопке OnClick установлено значение Button_Click
<asp:Button id="btn" runat="server" OnClick="Button_Click" />
тогда метод Button_Click должен иметь по крайней мере защищенную видимость для доступа к кнопке.
Вы можете обойти это, добавив к вам способ Page_Load:
btn.Click += new EventHandler(Button_Click);
Некоторые аспекты .NET, такие как ASP.NET, создают подклассы вашего кода-класса во время выполнения. Таким образом, класс ASP.NET-страницы, например, наследуется от класса codebehind. Предоставляя защищенный метод, динамически созданный класс страниц может легко подключить событие нажатия кнопки к защищенному методу в базовом классе, который обрабатывает его.
Если у вас есть унаследованная форма (или любой класс, если на то пошло), вы сможете вызвать эту функцию из подкласса.
Защищенные методы похожи на частные методы. Доступ к ним могли получить только члены класса. Разница лишь в том, что в отличие от частных членов, защищенные члены могут быть доступны и для производных классов.