Атрибуты: обозначение доступа - PullRequest
0 голосов
/ 26 октября 2011

Когда я ссылался на книгу, я получил следующие утверждения:

Когда тип данных или метод определены как общедоступные, другие объекты могут напрямую обращаться к ним.Когда тип данных или метод определены как закрытые, только конкретный объект может получить к ним доступ.

Теперь это действительно сбивает с толку.Public и Private - это Спецификаторы доступа, которые определяют только область действия атрибута или метода.

Почему объект смешивается со спецификаторами доступа?Имеет ли объект какое-либо отношение к общедоступным, частным или защищенным, за исключением того факта, что если определенная вещь определена как общедоступная, то объекты также смогут получить доступ независимо от области действия

Ответы [ 2 ]

1 голос
/ 26 октября 2011

Это не вопрос области видимости, а модификатор ограничения доступа.Если вы объявляете функцию как приватную, это означает, что только этот класс может вызывать эту функцию.

Public: любой может вызывать эти функции. Private: только этот класс и механизм обработки. Защищено: только этот класс и его производный член.например

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


}
0 голосов
/ 26 октября 2011

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