#c# #oop #private #public #private-members
#c# #ооп #Частное #общедоступный #частные участники
Вопрос:
Когда я ссылался на книгу , я получил следующие утверждения:
Когда тип данных или метод определены как общедоступные , другие объекты могут напрямую обращаться к ним. Когда тип данных или метод определены как частные, только конкретный объект может получить к ним доступ.
Теперь это действительно сбивает с толку. Public и Private — это спецификаторы доступа, которые определяют только область действия атрибута или метода.
Почему объект смешивается со спецификаторами доступа? Должен ли объект делать что-либо с общедоступным, частным или защищенным, кроме того факта, что если какая-то вещь определена как общедоступная, то объекты тоже смогут получить доступ к irespective из области
Ответ №1:
Это не вопрос области видимости, а модификатор ограничения доступа. Если вы объявляете функцию как закрытую, это означает, что только этот класс может вызывать эту функцию.
Public: любой может вызывать эти функции Private: Только этот класс и механизм отражения Protected: только этот класс и его производный член Internal: Общедоступный для всех классов в этой сборке
Небольшой пример
public class A
{
public int x;
protected int y;
private int z;
}
public class B : A
{
public int CallPro()
{
return y;
}
public int CallPriv()
{
return z; //error
}
}
static void Main()
{
A oa;
oa.x; //Fine
oa.y; //Error
oa.z; //Error
}
Ответ №2:
Public и Private — это спецификаторы доступа, которые определяют только область действия атрибута или метода.
И это определяет поведение объекта. Следовательно, спецификаторы доступа важны для объекта. Представьте, что если у вас есть объект типа фасада, вы не хотите раскрывать все детали операции, скорее вы хотите, чтобы простой общедоступный интерфейс (например, метод Save() ) был доступен для потребителей. Вот почему вы должны учитывать спецификаторы для объектов.
public class CustomerFacade()
{
public bool Save(Customer c)
{
VerifyCustomer(c);
// lots of other steps which the caller does not need to know
SaveorUpdateCustomer(c);
}
private void VerifyCustomer(Customer c)
{
}
private void SaveorUpdateCustomer(Customer c)
{
}
}
public class CustomerController()
{
public bool Save(Customer c)
{
return new CustomerFacade().Save(c);
}
}
Комментарии:
1. Спасибо. Будет понятнее, если у вас есть фрагмент кода для того же самого