Можно ли скрыть публичную подпрограмму / функцию в VB .Net? - PullRequest
0 голосов
/ 30 октября 2009

Может быть, я думаю об этом неправильно, но вот идея:

Класс A получает, как часть своего конструктора, указатель на класс B и сохраняет этот указатель в закрытой переменной. Класс B предоставляет открытую функцию F. Я хотел бы, чтобы класс A и все классы, которые наследуются от класса A, НЕ могли вызывать B.F.

Идея состоит в том, что класс A будет реализовывать свою собственную версию F, которая вызывает B.F, но остальная часть кода не должна вызывать B.F. Если это имеет значение, эти два имеют разные сигнатуры функций.

Можно ли это сделать? Или это должно быть сделано? Может быть, другой путь, например, класс C, который наследуется от класса B и скрывает публичные функции? (Неужели это вообще можно сделать?)

Ответы [ 2 ]

3 голосов
/ 30 октября 2009

Ты не должен этого делать. Это нарушает принцип замены Лискова .

Если вы действительно хотите скрыть базовые функции, класс "A" должен быть не базовым, а отдельным классом, который вы инкапсулируете в B и C.

2 голосов
/ 30 октября 2009

Это невозможно. Если метод F для типа B является общедоступным, а тип в противном случае имеет доступ к B, невозможно предотвратить вызов типа в открытый метод. Есть много приемов, которые вы можете сыграть, чтобы усложнить методы теневого копирования (новинка в C #), но в конце дня приведение к B - это все, что необходимо для переопределения ваших механизмов.

Если вы действительно хотите спрятать все, то создайте новый интерфейс, который предоставляет только подмножество методов, которые вы хотите использовать. Затем передайте экземпляр этого типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...