2017-02-19 25 views
0

Давайте посмотрим этот фрагмент кода:Сделать доступным членом только через собственность даже в классе владельца?

class A { 
    int m_x; 
    public int x { 
     get { return m_x; } 
     set { ... } 
    } 
} 

m_x является частным, так он доступен в классе А, но другие классы могут получить доступ к нему только через публичную x собственности.

У меня есть методы, которые ДОЛЖНЫ быть вызваны каждый раз, когда x изменяется. (Это в set { ... })

Моя проблема заключается в том, что в класса А я могу изменить значение m_x непосредственно.

  • Этим путем «должен быть вызван» методы не называются.

В настоящее время единственным индикатором этой ошибки является m_ префикс.

Есть ли способ сделать проверку времени компиляции?

+0

Но если это личное поле, его можно изменить только * вашим * кодом, которым вы можете управлять, не так ли? –

+0

Да, но есть человеческий фактор ошибки. Если в один из моих усталых моментов я пишу m_x вместо x, мне придется искать источник ошибки в течение нескольких часов. – Tudvari

ответ

1

Есть ли способ сделать проверку времени компиляции?

Нет, класс A должен знать, что он должен вызывать метод каждый раз, когда устанавливается личное поле. Это часть внутренней логики, которую класс фактически реализует.

Компилятор не может помешать вам установить личное поле, не вызвав метод первым. Это будет ответственность разработчика, а не компилятора.